python进行网页数据爬取(一)

网络数据采集的一般流程:

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文件
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页