"

                                        ✅万博manbext|体育首页✅㊣全球最大,最信誉的线上综合平台✅万博manbext|体育首页✅千款游戏,砖石级服务,万博manbext|体育首页,欢迎各界玩家加入体验!

                                                                              "
                                                                              中培教育IT资讯频道
                                                                              您现在的位置:万博manbext|体育首页 > IT资讯 > 学习交流 > python爬虫

                                                                              python爬虫

                                                                              2021-07-01 15:53:05 | 来源:中培企业IT培训网
                                                                              python这们计算机语言对大家来说应该就不陌生了万博manbext|体育首页。它的核心内容在往期的文章我们也有讲解万博manbext|体育首页万博manbext|体育首页。那么python爬虫又应该认识如何它呢万博manbext|体育首页?学习它万博manbext|体育首页,首先要了解爬虫思路万博manbext|体育首页,其次就是实战解析。实战解析又包括四个小的环节。

                                                                              两周前,一位同学问小央万博manbext|体育首页,平时有没有写过技术类博客万博manbext|体育首页万博manbext|体育首页。小央大言不惭万博manbext|体育首页万博manbext|体育首页万博manbext|体育首页,随口就说下次可以尝试。

                                                                              这不万博manbext|体育首页,自己挖的坑万博manbext|体育首页,哭也得填上。正巧万博manbext|体育首页,最近要统计自己的阅读记录万博manbext|体育首页,一个个看多费劲呀万博manbext|体育首页,如果能写个爬虫程序,自动化获取数据,岂不美哉万博manbext|体育首页。

                                                                              一瓶不响半瓶晃荡,技术渣小央万博manbext|体育首页万博manbext|体育首页,刚有点小成绩的时候万博manbext|体育首页万博manbext|体育首页,就忍不住的要分享给小白们了万博manbext|体育首页。

                                                                              一万博manbext|体育首页、爬虫思路

                                                                              爬虫是指请求网站并获取数据的自动化程序万博manbext|体育首页万博manbext|体育首页万博manbext|体育首页,又称网页蜘蛛或网络机器万博manbext|体育首页,最常用领域是搜索引擎,它的基本流程是明确需求-发送请求-获取数据-解析数据-存储数据。

                                                                              网页之所以能够被爬取万博manbext|体育首页万博manbext|体育首页,主要是有以下三大特征:

                                                                              网页都有唯一的URL(统一资源定位符万博manbext|体育首页,也就是网址)进行定位

                                                                              网页都使用HTML(定位超文本标记语言)来描述页面信息

                                                                              网页都使用HTTP/HTTPS(超文本传输协议)协议来传输HTML数据

                                                                              因此,只要我们能确定需要爬取的网页 URL地址万博manbext|体育首页,通过 HTTP/HTTPS协议来获取对应的 HTML页面万博manbext|体育首页万博manbext|体育首页,就能提取 HTML页面里有用的数据万博manbext|体育首页万博manbext|体育首页。

                                                                              在工具的选择上,任何支持网络通信的语言都可以写爬虫万博manbext|体育首页万博manbext|体育首页,比如 c++万博manbext|体育首页万博manbext|体育首页、 java、 go、 node等万博manbext|体育首页,而 python则是用的最多最广的,并且也诞生了很多优秀的库和框架,如 scrapy万博manbext|体育首页、 BeautifulSoup 、 pyquery万博manbext|体育首页、 Mechanize等万博manbext|体育首页万博manbext|体育首页万博manbext|体育首页。

                                                                              私信小编001 有神秘惊喜大礼包万博manbext|体育首页!

                                                                              BeautifulSoup是一个非常流行的 Pyhon ?万博manbext|体育首页??。该?万博manbext|体育首页?榭梢越馕鐾惩虿﹎anbext|体育首页万博manbext|体育首页万博manbext|体育首页,并提供定位内容的便捷接口万博manbext|体育首页。

                                                                              但是在解析速度上不如 Lxml耐虿﹎anbext|体育首页?橥虿﹎anbext|体育首页,因为后者是用C语言编写万博manbext|体育首页,其中 Xpath可用来在 XML文档中对元素和属性进行遍历万博manbext|体育首页万博manbext|体育首页万博manbext|体育首页。

                                                                              综上,我们本次爬取工具选择 Python万博manbext|体育首页,使用的包有 requests万博manbext|体育首页万博manbext|体育首页万博manbext|体育首页、 Lxml万博manbext|体育首页、 xlwt、 xlrd万博manbext|体育首页,分别用于模拟账户登录万博manbext|体育首页万博manbext|体育首页万博manbext|体育首页、爬取网页信息和操作 Excel进行数据存储等万博manbext|体育首页万博manbext|体育首页。

                                                                              二万博manbext|体育首页、实战解析

                                                                              1. 模拟账户登录

                                                                              因为要爬取个人账户下的读书列表,我们首先要让 Python创建用户会话万博manbext|体育首页,用于在跨请求时保存Cookie值,实现从客户端浏览器连接服务器开始,到客户端浏览器与服务器断开。

                                                                              其次要处理请求头 Header万博manbext|体育首页,发送附带账户名和密码的 POST请求万博manbext|体育首页,并获取登陆后的 Cookie值万博manbext|体育首页万博manbext|体育首页万博manbext|体育首页,保存在会话里万博manbext|体育首页万博manbext|体育首页。

                                                                              登陆进去之后,我们就可以长驱直入进行爬虫了;否则万博manbext|体育首页万博manbext|体育首页,它就会因请求不合法报错万博manbext|体育首页。

                                                                              代码示例

                                                                              # 1. 创建session对象万博manbext|体育首页,可以保存Cookie值ssion = requests.session()# 2. 处理 headersuser_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'headers={'User-Agent':user_agent}# 3. 需要登录的用户名和密码data = {"email":"豆瓣账户名XX", "password":"豆瓣密码XX"}# 4. 发送附带用户名和密码的请求,并获取登录后的Cookie值万博manbext|体育首页,保存在ssion里ssion.post("https://www.douban.com/accounts/login", data = data)respon=ssion.get(url,headers=headers)

                                                                              2. 分析网页结构

                                                                              进入读书页面,右键选择“检查”万博manbext|体育首页万博manbext|体育首页,可以看到如下界面:当鼠标定位在某一行代码时万博manbext|体育首页万博manbext|体育首页万博manbext|体育首页万博manbext|体育首页万博manbext|体育首页,就会选中左侧对应???。

                                                                              所有图书内容的标签万博manbext|体育首页,存放在一个类名为 id="content"的div盒子, class="subject-item"的li盒子万博manbext|体育首页。

                                                                              同样方法,我们也可以找到书名万博manbext|体育首页万博manbext|体育首页、作者万博manbext|体育首页、出版社万博manbext|体育首页万博manbext|体育首页、何时读过万博manbext|体育首页万博manbext|体育首页、评论信息万博manbext|体育首页万博manbext|体育首页,分别对应哪些标签万博manbext|体育首页。

                                                                              最终万博manbext|体育首页,我们通过CSS路径提取来提取对应标签数据。

                                                                              代码示例

                                                                              #因为每页有15本书万博manbext|体育首页,所以这里做了个循环for tr in trs: i = 1 while i <= 15: data = [] title = tr.xpath("./ul/li["+str(i)+"]/div[2]/h2/a/text()") info = tr.xpath('./ul/li['+str(i)+']/div[2]/div[1]/text()') date = tr.xpath('./ul/li['+str(i)+']/div[2]/div[2]/div[1]/span[2]/text()') comment = tr.xpath('./ul/li['+str(i)+']/div[2]/div[2]/p/text()')

                                                                              3. 自动翻页万博manbext|体育首页,循环爬取

                                                                              因为要爬取历史读书清单万博manbext|体育首页,当爬完一页的时候,需要程序能够实现自动翻页功能万博manbext|体育首页。

                                                                              一种方法是让它自动点击下一页万博manbext|体育首页,但这个学习成本有点高万博manbext|体育首页,吃力不讨好;另一种方法万博manbext|体育首页,就是寻找网页之间的规律,做个循环即可。

                                                                              以央之姑娘的豆瓣账户为例:很容易发现网页之间的区别仅在于start值不同万博manbext|体育首页万博manbext|体育首页,第一页的 start=0.第二页 start=15.以此类推,最后一页万博manbext|体育首页万博manbext|体育首页,即19页的 start=(19-1)*15=270.

                                                                              找到这样的规律就很容易实现Python自动翻页功能,条条大路通罗马万博manbext|体育首页,适合自己的就是最好的万博manbext|体育首页。

                                                                              代码示例

                                                                              def getUrl(self): i = 0 while i < 271: url = ('https://book.douban.com/people/81099629/collect?start='+str(i)+'&sort=time&rating=all&filter=all&mode=grid') self.spiderPage(url) i += 15

                                                                              4. 数据存储

                                                                              数据存储有很多种方法万博manbext|体育首页万博manbext|体育首页万博manbext|体育首页,因为数据量不大万博manbext|体育首页,用Excel即可满足万博manbext|体育首页万博manbext|体育首页,具体方法就不在这里赘述了万博manbext|体育首页。

                                                                              代码示例

                                                                              def __init__(self): self.f = xlwt.Workbook() # 创建工作薄 self.sheet1 = self.f.add_sheet(u'央之姑娘', cell_overwrite_ok=True) # 命名table self.rowsTitle = [u'编号',u'书名', u'信息', u'读过日期', u'评论'] # 创建标题 for i in range(0. len(self.rowsTitle)): # 最后一个参数设置样式 self.sheet1.write(0. i, self.rowsTitle[i], self.set_style('Times new Roman', 220. True)) # Excel保存位置 self.f.save('C://Users//DELL//央之姑娘.xlsx')

                                                                              def set_style(self, name, height, bold=False): style = xlwt.XFStyle() # 初始化样式 font = xlwt.Font() # 为样式创建字体 font.name = name font.bold = bold font.colour_index = 2 font.height = height style.font = font return style

                                                                              三万博manbext|体育首页万博manbext|体育首页、效果演示

                                                                              前面讲了爬虫的原理和方法万博manbext|体育首页万博manbext|体育首页万博manbext|体育首页,那么接下来我们就展示一下具体效果:

                                                                              附录:完整代码

                                                                              from lxml import etree

                                                                              import requests

                                                                              import xlwt

                                                                              import xlrd

                                                                              class douban(object):

                                                                              def __init__(self):

                                                                              self.f = xlwt.Workbook() # 创建工作薄

                                                                              self.sheet1 = self.f.add_sheet(u'央之姑娘', cell_overwrite_ok=True) # 命名table

                                                                              self.rowsTitle = [u'编号',u'书名', u'信息', u'读过日期', u'评论'] # 创建标题

                                                                              for i in range(0. len(self.rowsTitle)):

                                                                              # 最后一个参数设置样式

                                                                              self.sheet1.write(0. i, self.rowsTitle[i], self.set_style('Times new Roman', 220. True))

                                                                              # Excel保存位置

                                                                              self.f.save('C://Users//DELL//央之姑娘.xlsx')

                                                                              def set_style(self, name, height, bold=False):

                                                                              style = xlwt.XFStyle() # 初始化样式

                                                                              font = xlwt.Font() # 为样式创建字体

                                                                              font.name = name

                                                                              font.bold = bold

                                                                              font.colour_index = 2

                                                                              font.height = height

                                                                              style.font = font

                                                                              return style

                                                                              def getUrl(self):

                                                                              #自动翻页

                                                                              '''

                                                                              url = ('https://book.douban.com/people/81099629/collect?start=0&sort=time&rating=all&filter=all&mode=grid')

                                                                              self.spiderPage(url)

                                                                              '''

                                                                              i = 0

                                                                              while i < 271:

                                                                              url = ('https://book.douban.com/people/81099629/collect?start='+str(i)+'&sort=time&rating=all&filter=all&mode=grid')

                                                                              self.spiderPage(url)

                                                                              i += 15

                                                                              def spiderPage(self,url):

                                                                              if url is None:

                                                                              return None

                                                                              try:

                                                                              data=xlrd.open_workbook('C://Users//DELL//央之姑娘.xlsx')

                                                                              table=data.sheets()[0]

                                                                              rowCount=table.nrows#获取行数

                                                                              # 1. 创建session对象万博manbext|体育首页,可以保存Cookie值

                                                                              ssion = requests.session()

                                                                              # 2. 处理 headers

                                                                              user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'

                                                                              headers={'User-Agent':user_agent}

                                                                              # 3. 需要登录的用户名和密码

                                                                              data = {"email":"豆瓣账户名XX", "password":"豆瓣密码XX"}

                                                                              # 4. 发送附带用户名和密码的请求万博manbext|体育首页,并获取登录后的Cookie值,保存在ssion里

                                                                              ssion.post("https://www.douban.com/accounts/login", data = data)

                                                                              respon=ssion.get(url,headers=headers)

                                                                              htmltext=respon.text

                                                                              s = etree.HTML(htmltext)

                                                                              trs = s.xpath('//*[@id="content"]/div[2]/div[1]')

                                                                              m=0

                                                                              for tr in trs:

                                                                              i = 1

                                                                              while i <= 15:

                                                                              data = []

                                                                              title = tr.xpath("./ul/li["+str(i)+"]/div[2]/h2/a/text()")

                                                                              info = tr.xpath('./ul/li['+str(i)+']/div[2]/div[1]/text()')

                                                                              date = tr.xpath('./ul/li['+str(i)+']/div[2]/div[2]/div[1]/span[2]/text()')

                                                                              comment = tr.xpath('./ul/li['+str(i)+']/div[2]/div[2]/p/text()')

                                                                              title=title[0] if title else ''

                                                                              info=info[0] if info else ''

                                                                              date=date[0] if date else ''

                                                                              comment=comment[0] if comment else ''

                                                                              data.append(rowCount+m)

                                                                              data.append(title)

                                                                              data.append(info)

                                                                              data.append(date)

                                                                              data.append(comment)

                                                                              i += 1

                                                                              for n in range(len(data)):

                                                                              self.sheet1.write(rowCount+m,n,data[n])

                                                                              m+=1

                                                                              print(m)

                                                                              print(title, info, date, comment)

                                                                              finally:

                                                                              self.f.save('C://Users//DELL//央之姑娘.xlsx')

                                                                              if '_main_':

                                                                              qn=douban()

                                                                              qn.getUrl()

                                                                              通过这些部分的介绍万博manbext|体育首页,你应该学会了不少东西吧?有句话是这样说的:兴趣是最好的老师万博manbext|体育首页,如果你对爬虫有兴趣万博manbext|体育首页,那你可以好好了解一下这里还没有讲到的东西万博manbext|体育首页万博manbext|体育首页。想要了解更多关于Python的信息,请继续关注中培教育万博manbext|体育首页。
                                                                              标签: Python爬虫
                                                                              万博manbext|体育首页