php抓取网页数据插入数据库(接下来翻页规律解析网页的函数,我们接下来把他补全不一会 )
优采云 发布时间: 2021-12-14 07:22php抓取网页数据插入数据库(接下来翻页规律解析网页的函数,我们接下来把他补全不一会
)
1. 写在前面
作为活跃在京津冀地区的开发商,如果不想闲着,看看国际大都市石家庄的一些数据就知道了。本博客爬取了链家网的租房信息,获取的数据在以下博客中,可以作为一些数据分析的素材。
我们需要抓取的网址是:
2. 分析网址
首先确定我们需要什么数据
可以看到,×××框就是我们需要的数据。
接下来确定翻页规则
https://sjz.lianjia.com/zufang/pg1/
https://sjz.lianjia.com/zufang/pg2/
https://sjz.lianjia.com/zufang/pg3/
https://sjz.lianjia.com/zufang/pg4/
https://sjz.lianjia.com/zufang/pg5/
...
https://sjz.lianjia.com/zufang/pg80/
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎
3. 解析网页
有了分页地址,可以快速拼接链接,我们使用lxml模块解析网页源代码,得到想要的数据。
本次编码使用了一个新的模块fake_useragent,这个模块可以随机得到一个UA(user-agent),该模块使用起来比较简单,可以去百度百度很多教程。
本博客主要用于调用随机UA
self._ua = UserAgent()
self._headers = {"User-Agent": self._ua.random} # 调用一个随机的UA
因为页码可以快速拼接,所以使用协程对csv文件中使用的pandas模块进行抓包写入
from fake_useragent import UserAgent
from lxml import etree
import asyncio
import aiohttp
import pandas as pd
class LianjiaSpider(object):
def __init__(self):
self._ua = UserAgent()
self._headers = {"User-Agent": self._ua.random}
self._data = list()
async def get(self,url):
async with aiohttp.ClientSession() as session:
try:
async with session.get(url,headers=self._headers,timeout=3) as resp:
if resp.status==200:
result = await resp.text()
return result
except Exception as e:
print(e.args)
async def parse_html(self):
for page in range(1,77):
url = "https://sjz.lianjia.com/zufang/pg{}/".format(page)
print("正在爬取{}".format(url))
html = await self.get(url) # 获取网页内容
html = etree.HTML(html) # 解析网页
self.parse_page(html) # 匹配我们想要的数据
print("正在存储数据....")
######################### 数据写入
data = pd.DataFrame(self._data)
data.to_csv("链家网租房数据.csv", encoding='utf_8_sig') # 写入文件
######################### 数据写入
def run(self):
loop = asyncio.get_event_loop()
tasks = [asyncio.ensure_future(self.parse_html())]
loop.run_until_complete(asyncio.wait(tasks))
if __name__ == '__main__':
l = LianjiaSpider()
l.run()
上面的代码缺少解析网页的功能,我们接下来补上
def parse_page(self,html):
info_panel = html.xpath("//div[@class='info-panel']")
for info in info_panel:
region = self.remove_space(info.xpath(".//span[@class='region']/text()"))
zone = self.remove_space(info.xpath(".//span[@class='zone']/span/text()"))
meters = self.remove_space(info.xpath(".//span[@class='meters']/text()"))
where = self.remove_space(info.xpath(".//div[@class='where']/span[4]/text()"))
con = info.xpath(".//div[@class='con']/text()")
floor = con[0] # 楼层
type = con[1] # 样式
agent = info.xpath(".//div[@class='con']/a/text()")[0]
has = info.xpath(".//div[@class='left agency']//text()")
price = info.xpath(".//div[@class='price']/span/text()")[0]
price_pre = info.xpath(".//div[@class='price-pre']/text()")[0]
look_num = info.xpath(".//div[@class='square']//span[@class='num']/text()")[0]
one_data = {
"region":region,
"zone":zone,
"meters":meters,
"where":where,
"louceng":floor,
"type":type,
"xiaoshou":agent,
"has":has,
"price":price,
"price_pre":price_pre,
"num":look_num
}
self._data.append(one_data) # 添加数据
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎
过一会,数据就差不多爬完了。