php抓取网页数据插入数据库(接下来翻页规律解析网页的函数,我们接下来把他补全不一会 )

优采云 发布时间: 2021-12-14 07:22

  php抓取网页数据插入数据库(接下来翻页规律解析网页的函数,我们接下来把他补全不一会

)

  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学习者的聚集地,零基础,进阶,都欢迎

  过一会,数据就差不多爬完了。

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线