#有手就行系列 – 网页爬取(简易版)
1、准备阶段(链接代码)
1)下载链接的代码文档(anaconda打开)或是文末的代码
2)进行尝试,点击运行查看是否有报错
tips:1、点击“1”箭头所示运行
2、注意“2”箭头所示处报错,查看自己是否安装相应的库
👇tips
2、代码阶段
1)获取网站全部内容(内容都在注释中,按步骤修改即可)
html_url="https://www.csdn.net"
#html_url="想爬取的网站网址"
#此处我们以csdn网站为例,自己使用时修改这部分内容即可(即填入自己所需爬取网站网址)
encoding_name='utf-8'
#encoding_name='想使用的encoding'
#'r','utf-8','GBK'
#此处我们需要使用‘utf-8’,常见的encoding已列举,一个不行换一个
import requests
import re
from lxml import etree
def html_get(html_url,encoding_name):
headers={'user-agent' : 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36'}
response=requests.get(html_url,headers=headers)
response.encoding=encoding_name
html_text=response.text
html=etree.HTML(html_text)
return html,html_text
original_html,html_text=html_get(html_url,encoding_name)
original_html
#这一段直接复制黏贴即可
tips:1、注意运行后输出时是否存在element(即Element html at xxxx “1”箭头所指)
2、注意查看“2”箭头所示输出内容,查看是否有乱码,网站内容是否存在,有乱码时更换encoding
2)获取指定内容
例如我们现在需要社区大事板块的所有内容的标题,以及链接网址
👆我们先选择一个小版块的标题并右击检查
👆在右侧跳出的页面逐层上移,会发现左侧网页出现蓝色区域,上移直至蓝色区域覆盖全部板块内容
👆然后收起所有的多余内容,找到每一个小版块的xpath地址
👆同样的找到全部大事板块的xpath
右击此处选择copy->copyXpath,并黏贴至如下xpath中,查看是否有输出
element = original_html.xpath('//*[@id="floor-www-index_558"]/div/div[2]/div[1]/div[2]/div[1]')
#element = original_html.xpath('你copy的xpath填入这里')
element
👆我们可以看到每个小版块是div
element_full = element[0].xpath('./div')
#element_full = element[0].xpath('./这里修改小版块的内容例如div')
element_full
我们输出的形式是列表嵌套列表,每个小列表中是需要的内容,我们这里需要小版块的全部链接以及标题,老样子右键点击检查
我们仔细查看这个小版块,找到标题藏在的地方即
<span class="blog-text">如何用一张照片进行GPS定位?—最好的语言Java实现起来就这么简单!【手把手教程+完整代码】</span>
一般找寻网页链接,使用/@href,而找寻文字使用/text()
content_full = []
for i in element_full:
content = []
href = i.xpath('.//@href')
#href = i.xpath('.//@href') 双斜杠代表查询所有的链接
title = i.xpath('.//span[@class="blog-text"]/text()')
#title = i.xpath('.//这里填所需文字前的标签如span[@class="blog-text"]/text()')
content.append(href)
content.append(title)
content_full.append(content)
content_full
👆输出
3、补充内容
1)网页内容不尽相同,但是查找xpath方法类似
2)xpath使用有更多的内容可以搜索相应文档阅读
3)有分页多个页数的网站时,先查找一共有几页,再for循环搭建html_url即可
4)有的需要查找文字中的某些内容,请查阅re的使用
5)xpath的输出是列表格式,也可以’’.join方法转化为字符串
4、代码
html_url="https://www.csdn.net"
encoding_name='utf-8'
#'r','utf-8','GBK'
import requests
import re
from lxml import etree
def html_get(html_url,encoding_name):
headers={'user-agent' : 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36'}
response=requests.get(html_url,headers=headers)
response.encoding=encoding_name
html_text=response.text
html=etree.HTML(html_text)
return html,html_text
original_html,html_text=html_get(html_url,encoding_name)
original_html
html_text
element = original_html.xpath('//*[@id="floor-www-index_558"]/div/div[2]/div[1]/div[2]/div[1]')
element
element_full = element[0].xpath('./div')
element_full
content_full = []
for i in element_full:
content = []
href = i.xpath('.//@href')
title = i.xpath('.//span[@class="blog-text"]/text()')
content.append(href)
content.append(title)
content_full.append(content)
content_full