第10章 Python网络爬虫_第1页
第10章 Python网络爬虫_第2页
第10章 Python网络爬虫_第3页
第10章 Python网络爬虫_第4页
第10章 Python网络爬虫_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第10章Python网络爬虫网络爬虫网络爬虫,是按照一定的规则自动浏览万维网、并获取信息的程序或者脚本。网络爬虫主要通过网页中的超链接信息不断获得网络上的其他页面,数据采集过程就像一个爬虫在网络上漫游,其主要应用于搜索引擎、社交应用、舆情监控、行业数据等方面。requests库知识CONTENT要点lxml库网络爬虫的基本步骤网络爬虫的基本步骤获取网页解析网页并提取数据解析网页,就是用来解析HTML页面,从HTML网页信息中提取需要的、有价值的数据和链接。这里解析HTML页面,主要使用Python的Lxml库。获取网页,首先要实现HTTP请求,这里使用Python的Requests库实现。认识HTML页面<html><head><metacharset=”utf-8”><title>Title</title></head><body>...</body></html>超文本标记语言(HyperTextMarkupLanguage),简称HTML。HTML是网页制作必备的编程语言。“超文本”就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。requests库及lxml库requests库使用requests库来实现HTTP请求。requests库相关方法:

#get请求方法,获取网页

>>>r=requests.get('/’)

#打印get请求的状态码。200:请求成功;404:请求的资源不存在

>>>r.status_code200

#查看请求的文本编码,如utf-8编码

>>>r.encoding'utf-8'

#打印请求到的内容

>>>r.textu'{"type":"User"...'lxml库Lxml库是简单易学且解析效率非常高的网页解析库。Lxml库的大部分功能都存在于lxml.etree模块中,使用时,一般导入Lxml库的etree模块

>>>fromlxmlimportetree

Xpath路径语言XPath(XMLpathlanguage)即为XML路径语言,用于确定XML树结构中的某一部分的位置,能够在树结构中遍历节点(元素、属性等)选取节点:Nodename:选取此节点的所有子节点/:从根节点选取//:从任意位置开始,选取所有节点。从匹配选择的当前节点选取文档中的节点,而不用考虑他们的位置.:选取当前节点..:选取当前节点的父节点@:选取属性Xpath路径语言谓语(补充说明节点)谓语指的是路径表达式的附加条件,这些条件都写在括号中,表示对节点进行进一步筛选,用于查找某个特定节点或者包含某个指定值的节点。具体格式如:元素[表达式]/bookstore/book[1]:选取属于bookstore子元素的第一个book元素/bookstore/book[last()]:选取属于bookstore子元素的最后一个book元素/bookstore/book[position()<3]:选取最前面的两个属于bookstore元素的子元素的book元素//title[@lang]:选取所有title元素,且这些元素拥有名称为lang的属性//title[@lang='eng']:选取所有title元素,且这些元素拥有值为'eng'的lang属性/bookstore/book[price>35.00]:选取bookstore元素的所有book元素,且其中的price值需要大于35/bookstore/book[price>35.00]/title:选取bookstore元素中book元素的所有title元素,且其中book元素的price元素的值需要大于35Xpath路径语言选取未知节点*:匹配任何元素节点。如:/bookstore/*选取bookstore元素的所有子元素@*:匹配任何属性节点。如://*选取文档中的所有元素node():匹配任何类型的节点。如://title[@*]选取所有title元素,且title元素需要带有任意属性Lxml解析库操作及功能使用Element类来创建节点、属性、文本等。使用etree.tosting()将元素序列化为XML树的编码字符串表示形式。使用Element.set()节点对象的set()方法,给该Element已有的节点对象添加属性。使用Element.text或Element.tail、Element.tag等属性,来获取和设置节点对象的相关文本等属性。使用Element.find()/findall()/iterfind()节点对象方法,来搜索和查询节点。使用Element.xpath()节点对象方法,返回与该路径表达式匹配的列表。注意:xpath返回匹配内容是列表格式,所以使用[0]索引来提取内容。使用etree.HTML()从字符串常量中,解析HTML文档或片段,返回根节点。并且可以自动补全标签。爬取静态网页实例1爬取静态网页实例1爬取BookstoScrape网站1-10页的书籍名称、价格、现货等信息,并写入到CSV格式文件books.csv中去。导入库:importrequestsimporttimefromlxmlimportetree爬取静态网页实例1用chrome浏览器打开网页,/catalogue/10.html网页上单击右键,单击“检查”,点击”Network”选项,获取网页的头部信息,并处理成字典形式。headers={"User-Agent":"Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/71.0.3578.10Safari/537.36"}爬取静态网页实例1解析网页f=open("books.csv","a",encoding="utf-8")#追加方式打开books.csv文件pre_url="/catalogue/"#URL地址前缀部分k=0#计数器,作为所爬取到的书本信息序号foriinrange(1,11):#爬取1-10页的页面内容

r=requests.get(pre_url+str(i)+".html",headers=headers)#获取网页

time.sleep(2)html=etree.HTML(r.content)#解析网页,并返回HTML的树状结构html爬取静态网页实例1CopyXPath方式,获取书籍列表的节点路径,并遍历处理booklist=html.xpath('//*[@id="default"]/div/div/div/div/section/div[2]/ol/li')forbookinbooklist:a=book.xpath('article/h3/a/text()')[0]#获取书本标题信息

b=book.xpath('article/div[2]/p[1]/text()')[0]#获取书本价格信息

c=book.xpath(‘article/div[2]/p[2]/text()’)[1].strip(“\n”).strip()#获取书本库存信息

k=k+1item=[str(k),a,b,c]s=",".join(item)+"\n"f.write(s)#将书本信息写入CSV格式文件f.close()爬取静态网页实例1爬取结果爬取静态网页实例2爬取静态网页实例2深层页面爬取BookstoScrape网站1-10页的书籍详细信息。就需要爬虫能够从书籍列表页面中提取出书籍详细信息的URL,并爬取书籍详情页面。importrequestsimporttimefromlxmlimportetreeheaders={"User-Agent":"Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/71.0.3578.10Safari/537.36"}f=open("booksdetail.csv","a",encoding="utf-8")#追加方式打开booksdetail.csv文件preurl="/catalogue/"#URL地址前缀部分爬取静态网页实例2定义函数,使用requests下载指定URL的网页defdownload(url):r=requests.get(url,headers=headers)time.sleep(3)returnetree.HTML(r.content)爬取静态网页实例2爬取书籍列表信息及详细信息k=0#计数器,用于统计爬取信息条数foriinrange(1,11):#爬取1-10页面的书籍列表信息

url=preurl+""+str(i)+".html"html=download(url)bookslist=html.xpath('//*[@id="default"]/div/div/div/div/section/div[2]/ol/li')forbookinbookslist:a=book.xpath('article/h3/a/text()')[0]#获取书本标题信息

b=book.xpath('article/div[2]/p[1]/text()')[0]#获取书本价格信息

k=k+1

爬取静态网页实例2构造书籍详细页面信息bookurl=preurl+book.xpath("article/div[1]/a/@href")[0]#获取书本详细信息URLbookhtml=download(bookurl)#获取书本详细页面DOM树

time.sleep(3)bookstock=bookhtml.xpath("//*[@id='content_inner']/article/table/tr[6]/td/text()")[0]#获取库存信息

bookdesc=bookhtml.xpath("//*[@id='content_inner']/article/p/text()")[0]#获取书本的详细介绍

item=[str(k),a,b,bookstock,bookdesc]s=",".join(item)+"\n"f.write(s)print("正在抓取",a)f.close()爬取静态网页实例2爬取过程爬取静态网页实例2爬取结果爬取静态网页实例3爬取静态网页实例3爬取BookstoScrape网站1-10页的书籍封面图片,并自动保存到本地文件夹book中去,文件名为书籍爬取序号。首先要获取书籍封面图片的URL地址,再根据这个URL地址请求并获得图片内容,然后保存图片到指定文件夹中。爬取静态网页实例3k=0#计数器,用于统计爬取信息条数foriinrange(1,11):#爬取1-10页面的书籍列表信息

url=preurl+"catalogue/"+str(i)+".html"html=downlo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论