0%

网络爬虫入门实践项目

本文介绍一些入门的实践项目,非常简单的几个例子。

继上之前有关爬虫基础及Requests库介绍以及网络爬虫的问题和行为规范介绍后,今天开始进行三个实践小项目。

实例1:京东商品页面爬取

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import requests
def getHTMLText(url, hd):
try:
r = requests.get(url, headers = hd)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text[:1000] #不要显示太多,只显示前1000个字符
except:
return "产生异常"

if __name__ == "__main__":
url = "https://item.jd.com/4406761.html" #magic keyboard2
hd = {'user-agent':'Mozilla/5.0'} # 注意这里需要加入user-agent,要不然返回的信息似乎是要登陆。
print(getHTMLText(url, hd))

注意,如果不指定headers字段,那么是爬不到结果的,这是因为当我们直接用requests库爬取时,会告知网页我们使用的是requests库,利用r.requests.headers可以看到user-agent字段的内容是'python-requests/版本号'

由于有些网站不允许爬虫,于是对其进行了限制。不过为了爬取,我们可以采取指定user-agent字段为一个伪装的浏览器。这就是上面hd那一行代码的由来。这样我们爬取的时候网页会以为我们是一个浏览器访问的。

实例2: 搜索引擎关键词提交

百度的关键词接口:

http://www.baidu.com/s?wd=keyword

360的关键词接口:

http://www.so.com/s?q=keyword

只要构造这样的url就可以完成关键字提交。可以利用params可以向url中增加内容。下面以360搜索为例(百度搜索根据现有知识无法做到爬取网页,必须要验证,360目前还ok)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import requests 
def getHTMLText(url, hd, kv):
try:
r = requests.get(url, headers = hd, params = kv)
print(r.request.url) # 可以利用这个语句获取当前requests的url是什么
r.raise_for_status()
print(len(r.text))
except:
print('爬取异常')

if __name__ == "__main__":
hd = {'user-agent':'Mozilla/5.0'}
kv = {'q':'Python'} # 给出搜索词
url = 'https://www.so.com/s'
getHTMLText(url, hd, kv)

返回的输出结果为:

>>> https://www.so.com/s?q=Python

>>> 319088

实例3: 网络图片的爬取

爬取的图片来自中国国家地理网站。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import requests 
import os

if __name__ == "__main__":
url = 'http://img0.dili360.com/ga/M00/48/CB/wKgBzFmeOaWAAg7SAAMP0b_hOVw041.tub.jpg'
root = './'
path = root + url.split('/')[-1] # 获得网页中图片的名字,即.jpg前面的内容
try:
if not os.path.exists(root): # 如果根目录不存在,就创建一个
os.mkdir(root)
if not os.path.exists(path): # 如果路径不存在,就读取
r = requests.get(url)
with open(path, 'wb') as f: # 读入到路径中
f.write(r.content)
f.close()
print('文件保存成功')
else:
print('文件已存在')
except:
print('读取失败')

经过三个小实例的学习,其实爬虫主要就是解析网站,然后爬取相应的内容。

感谢北京理工大学老师的课程,虽然课程可能有些旧,好多网页根据课程教的已经不好爬到东西了,但是感觉真的是很清晰明了了。


接下来似乎就可以进阶了,希望自己能在7月到来前把基础学个差不多,最近感觉有点心急,想学的东西太多,心急吃不了热豆腐,慢慢积累不断丰富自己吧。

加油:)

-------------本文结束感谢您的阅读-------------