python爬虫实战一|大众点评网

PS:如果不懂的可以看我的上一篇文章快速入门Python爬虫

阶段类型问题需要做到
1请求网页数据在哪里?发现网址url规律
2请求如何获取网页数据先尝试使用requests成功访问一个url,拿到一个页面数据
3解析从html中定义需要的数据使用pyquery对这一个页面的网页数据进行解析
3解析从json中定位需要的数据使用json或resp.json()进行json网页数据解析
4存储如何存储数据使用csv库将数据存储到csv文件中
5大功告成重复2-4for循环对所有的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)

  • 4
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向阳-Y.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值