网络数据采集的一般流程:
1、通过网站域名获取HTML数据;
2、根据目标信息解析数据;
3、存储目标信息;
4、若有必要,移到另一个网页重复这个过程。
一、通过网站域名获取HTML数据;
使用requests库来进行获取HTML数据
import requests
url = 'https://www.runoob.com/python3/python3-tutorial.html'
r = requests.get(url)
html = r.text.encode(r.encoding).decode()
print(html)
二、根据目标信息解析数据;
1、html网页结构;
一个页面包含了head和body两部分的内容,需要的内容一般是在body中。
2、利用BeautifulSoup解析html
#根据目标信息解析html文档
import requests
from bs4 import BeautifulSoup
url = 'https://www.runoob.com/python3/python3-tutorial.html'
r = requests.get(url)
html = r.text.encode(r.encoding).decode()
soup = BeautifulSoup(html,'lxml')
print(soup.head)
print(soup.body.h2)
print(soup.findAll('h2'))
三、存储目标信息;
将爬取的信息按照自己的需要存储为相应的表格或是文本文件
#存储目标信息,将信息存储至.csv,.txt等文件中
import requests
from bs4 import BeautifulSoup
import pandas as pd
url = 'https://www.runoob.com/python3/python3-tutorial.html'
r = requests.get(url)
html = r.text.encode(r.encoding).decode()
soup = BeautifulSoup(html,'lxml')
l = [x.text for x in soup.findAll('h2')] #读取中文信息
df = pd.DataFrame(l,columns = ['data'])
df.to_excel('爬虫.xlsx')
df.to_csv('爬虫.csv') #通常存取较大的数据
四、移至其他网页爬取。
1、批量进行网页爬取,相关命令的作用在备注中进行了详细的说明
#转至其他网页进行数据爬取
import requests
from bs4 import BeautifulSoup
import pandas as pd
url = 'https://www.runoob.com/python3/python3-tutorial.html'
r = requests.get(url)
html = r.text.encode(r.encoding).decode()
soup = BeautifulSoup(html,'lxml')
l = [x.text for x in soup.findAll('h2')]
df = pd.DataFrame(l,columns = [url])
links = [i for i in soup.findAll('a')\
if i.has_attr('href') and i.attrs['href'][0:7]=='/python']
#print(soup)
relative_urls = set([i.attrs['href'] for i in links]) #得到绝对路径并转换为集合的形式进行去重操作
#print(relative_urls)
absolute_urls = {'https://www.runoob.com' +\
i for i in relative_urls} #进行网址拼接,获取绝对路径
absolute_urls.discard(url) #去除第一个网址,因为我们前面已经爬取了该网址的内容
for i in absolute_urls:
ri = requests.get(i)
htmli = ri.text.encode(ri.encoding).decode()
soupi = BeautifulSoup(htmli,'lxml')
li = [x.text for x in soupi.findAll('h2')]
dfi = pd.DataFrame(li,columns = [i])
df = df.join(dfi,how = 'outer')
df.to_csv('data.csv') #将最终爬取的全部结果存储到名称为data的.csv文件