第七单元 正则表达式
正则表达式在解析 html 中有重要作用,通过字符匹配可以获取需要的信息。由于正则表达式的教程很多,不在此赘言。
第八单元 淘宝界面爬取
本单元我们要做的是在淘宝界面输入搜索内容然后爬取。整个分为三步:
1. 提交商品搜索请求,循环获取界面; _getHTMLText(url)_
2. 对于每个界面,提取商品的名称和价格; _parsepage(ilt, html)_
3. 输出价格信息。 _printGoodList(ilt)_
我们用到的技术路线是 requests + 正则表达式。
对于第一步首先要观察在淘宝输入搜索内容后返回的链接,不难发现搜索后的链接为 https://s.taobao.com/search?q=
后跟搜索的内容,我们用变量 start_url
存储;且第二页的链接为 start_url
+ ‘$s=44’,观察可知每页显示44个商品(实际上第一页是48个),故可推知每一页的 url
,调用 getHTMLText(url)
获取页面源码。
之后,我们调用 parsepage(ilt, html)
,利用正则表达式直接提取商品名称和价格到列表中,然后在 printGoodList(ilt)
中打印:
try:
plt = re.findall(r'\"view\_price\"\:\"\[\d\.]+\"', html)
tlt = re.findall(r'\"raw\_title\"\:\".\*?\"', html)
for i in range(len(plt)):
price = eval(plt\[i].split(':')\[1])
title = eval(tlt\[i].split(':')\[1])
ilt.append(\[price, title])
except:
print('失败')
要注意的是,在调用 getHTMLText(url) 时,要添加 user-angent 字段,否则会被定向到登陆界面。不需要登陆。
第九单元 股票信息爬取
获取股票的信息,技术路线:request + bs4 + re。 分为以下三步: 1. 从东方股票网获取股票列表;2. 到百度股票获取个股信息;3.保存结果到文件。
和爬取淘宝网页差不多,较为关键的代码是信息的提取:
soup = BeautifulSoup(html, 'html.parser')
infoDict = {}
# find 得到的结果才能再调用find等函数, find_all不可以
stockInfo = soup.find('div', attrs={'class': 'stock-info'})
name = stockInfo.find_all(attrs={'class': 'bets-name'})[0]
infoDict.update({'股票名称': name.text.split()[0]})
keyList = stockInfo.find_all('dt')
valueList = stockInfo.find_all('dd')
for i in range(len(keyList)):
key = keyList[i].text
value = valueList[i].text
infoDict[key] = value
后三章 Scrapy
最后三章是 Scrapy 框架的介绍、基本使用和小实战,但是我对 Scrapy 的了解和使用还是不太清晰,所以还需要再看一下,在此不做记录了。
github代码链接:https://github.com/pacraswill/spider-mooc.git