爬虫是python的一个特色,先让我们了解下爬虫的基本流程:
一、发起请求:通过HTTP库向目标站点发起请求(request),请求可以包含额外的header等信息,等待服务器响应。
二、获取响应内容:如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能是HTML,Json字符串,二进制数据(图片或者视频)等类型。
三、解析内容:得到的内容可能是HTML,可以用正则表达式,页面解析库进行解析,可能是Json,可以直接转换为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理。
四、保存数据:保存形式多样,可以存为文本,也可以保存到数据库,或者保存特定格式的文件。
我们用一个小例子入手,海关总署的网站示例,抓取首页包含“海关”的词出来。代码如下:
#-*- coding:utf-8 -*-
from bs4 import BeautifulSoup as bs
from urllib.request import urlopen
import re
import ssl
ssl._create_default_https_context = ssl._create_unverified_context #全局取消证书验证
#请求URL,并把结果用utf-8编码
req = urlopen("https://www.customs.gov.cn/").read().decode("utf-8")
#使用beautifulsoup去解析
soup = bs(req,"html.parser")
urllist = soup.find_all('option')
for url in urllist:
if re.search('海关',str(url)):
print(re.sub("[A-Za-z0-9\!\%\[\]\,\。\<\=\:\/\.\>\"]", "", str(url)))
我print了一下soup,发现HTML里面包含“海关”词的主要是option项里,于是把html包含里面option的放入数组urllist,然后对这个字符串进行代换,剩下的中文显示出来即可。爬虫的重要点就是对soup对象进行加工,得到想要的信息。
吐槽一下:海关总署的网站居然没有反爬虫。