python爬虫实战一|大众点评网
1、请求网页数据在哪里?发现网址url规律2、请求如何获取网页数据先尝试使用requests成功访问一个url,拿到一个页面数据3、解析从html中定义需要的数据使用pyquery对这一个页面的网页数据进行解析从json中定位需要的数据使用json或resp.json()进行json网页数据解析4、存储 如何存储数据使用csv库将数据存储到csv文件中
·
PS:如果不懂的可以看我的上一篇文章快速入门Python爬虫
阶段 | 类型 | 问题 | 需要做到 |
---|---|---|---|
1 | 请求 | 网页数据在哪里? | 发现网址url规律 |
2 | 请求 | 如何获取网页数据 | 先尝试使用requests成功访问一个url,拿到一个页面数据 |
3 | 解析 | 从html中定义需要的数据 | 使用pyquery对这一个页面的网页数据进行解析 |
3 | 解析 | 从json中定位需要的数据 | 使用json或resp.json()进行json网页数据解析 |
4 | 存储 | 如何存储数据 | 使用csv库将数据存储到csv文件中 |
5 | 大功告成 | 重复2-4 | for循环对所有的url进行访问解析存储 |
以大众点评为例:
http://www.dianping.com/shanghai/hotel
1.发现网址url规律
大众点评网址规律,每一页对应p1,p2…
针对规律写出如下代码
>template='http://www.dianping.com/shanghai/hotel/p{page}'
>for p in range(1,51):
url=template.format(page=p)
print(url)
2.拿到一个页面数据
先尝试使用requests成功访问一个url,拿到一个页面数据:以p1为例
>import requests
>url='http://www.dianping.com/shanghai/hotel/p1'
>headers={"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) >AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36"}
>resp=requests.get(url,headers=headers)
>resp.text[:1000] #表示获取前1000个字符内容
通过headers伪装成功拿到:
3.数据解析
使用pyquery对这一个页面的网页数据进行解析,首先使用select工具定位到hotel-block块
通过tag多级
进行精确定位
以下输出关于含有hotel-block属性的块
from pyquery import PyQuery
doc=PyQuery(resp.text)
for hotel in doc.items('.hotel-block'):
print(hotel)
以下为输出关于含有a标签和hotel-name属性的行。,text()可以取出标签中的值
for hotel in doc.items('.hotel-block'):
print(hotel('.hotel-name a'))
依次类推,改进代码:最终
from pyquery import PyQuery
doc=PyQuery(resp.text)
for hotel in doc.items('.hotel-block'):
hotel_name=hotel('.hotel-name-link').text()
addr1=hotel('.place a').text()
addr2=hotel('.walk-dist').text()[1:]
print(hotel_name,addr1,addr2)
输出如下图:
4.存储数据
使用csv库将数据存储到csv文件中,–>不会的请点我<–
>>> import csv
>>> path='F:/papapa/data/dianpin.csv'
>>> csvf=open(path,'a+',encoding='utf-8',newline='')
>>> fieldnames=['hotel_name','addr1','addr2']
>>> writer=csv.DictWriter(csvf,fieldnames=fieldnames)
>>> writer.writeheader()
>>> for hotel in doc.items('.hotel-block'):
hotel_name=hotel('.hotel-name-link').text()
addr1=hotel('.place a').text()
addr2=hotel('.walk-dist').text()[1:]
data={'hotel_name':hotel_name,
'addr1':addr1,
'addr2':addr2}
writer.writerow(data)
>>> csvf.close()
5.大功告成
总结2-4,并爬取每一页的数据
import requests
from pyquery import PyQuery
import csv
#新建csv
path='F:/papapa/data/dianpin.csv'
csvf=open(path,'a+',encoding='utf-8',newline='')
fieldnames=['hotel_name','addr1','addr2']
writer=csv.DictWriter(csvf,fieldnames=fieldnames)
writer.writeheader()
template='http://www.dianping.com/shanghai/hotel/p{page}'
headers={"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) >AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36"}
for p in range(1,51):
print(p)
url=template.format(page=p)
resp=requests.get(url,headers=headers)
doc=PyQuery(resp.text)
#存储数据
for hotel in doc.items('.hotel-block'):
hotel_name=hotel('.hotel-name-link').text()
addr1=hotel('.place a').text()
addr2=hotel('.walk-dist').text()[1:]
data={'hotel_name':hotel_name,
'addr1':addr1,
'addr2':addr2}
writer.writerow(data)
csvf.close()
本篇代码可阅读性不强,特此发布一篇用函数封装后的文章,欢迎查看~
python爬虫实战一|大众点评网(2)
点击阅读全文
更多推荐
活动日历
查看更多
直播时间 2025-02-26 16:00:00


直播时间 2025-01-08 16:30:00


直播时间 2024-12-11 16:30:00


直播时间 2024-11-27 16:30:00


直播时间 2024-11-21 16:30:00


目录
所有评论(0)