BeautifulSoup和Xpath都是爬虫工具。我的认知里,掌握这两个工具,就能把爬虫最基本的功能应用上,其他的加请求头,写入数据,还有遥远的scrapy(还没学),都是在此基础上发挥的。
Beautiful知识点,我个人觉得最重要的是find_all/find和select的区别,select可以一层层的找标签,适合小白面对复杂的情况。
soup = BeautifulSoup(html_doc)
print soup.find_all('title') #提取'title'标签的所有列表
print soup.find_all('p',class_='title') #提取含‘p'标签的且'class'属性是'title'的所有列表
print soup.find(id="link2") #提取id的'属性是"link2"的一个列表
print soup.select('tag.name1>tag.name2') #提取tag.name1标签下的tag.name2标签
soup.select('#****')
Xpath知识点,xpath就".xpath"一个命令,我自己反而觉得轻松一点。(但也不代表没有坑...)
·在网页源代码中右键,Copy XPath
·// 定位根节点
·/ 往下层寻找
·提取文本内容:/text()
·提取属性内容: /@xxxx
·以相同的字符开头 starts-with(@属性名称, 属性字符相同部分)
拿个蚂蚁短租的网站爬虫做例子,只选取成都的房间数,可以看到,在font class那级,但我觉得设定字体语句的不一定是唯一,所以向上一级选取。
1.png
也是写的很简单,主要对比一下bs4和xpath的语句:
import requests
from lxml import etree
from bs4 import BeautifulSoup #其他都要一起,就这个是bs独有的,不用bs就不用import了。
import random
#请求头也是放之四海皆准的:
def getReqHeaders():
user_agents = ["Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"]
user_agent = random.choice(user_agents)
req_headers = {'User-Agent': user_agent}
return req_headers
找到网页的url和一级请求也是一样的:
url='http://www.mayi.com/chengdu/?d1=2017-05-31&d2=2017-06-02'
html=requests.get(url,headers=getReqHeaders())
#BeautifulSoup的写法,非唯一:
soup=BeautifulSoup(html,'html.parser')
number = soup.find_all(name='span',class_="ml10").text[0]
#Xpath的写法,非唯一:
selector=etree.HTML(html)
number=selector.xpath('//*[@id="totalCount"]/text()')[0]
#出来的结果是一样的
print number
print(number.font.text) #bs爬出来的是在font里的,所以再提取一次。在我之前爬煎蛋网的时候,因为段子是用< p>分隔的,所以也是写成print link.p.get_text()。
Xpath我很快就做出来了,但bs4我折腾很久,拿给yaung大神看,然后他告诉我把ml10看成m110了,所以标签也写错了....错了....错了....
所以从这个角度来说,xpath也比较方便吧,直接copy肯定不会有错。
总而言之,爬虫的步骤都是获得网页地址—〉解析网页代码—〉爬取网页内容—〉存储数据,基本法是不变的。
又完成了一篇小白科普文,大家都是这么过来的!(只不过有人冬眠期比较长,比如我...)
网友评论