产品文档 前端技术 后端技术 编程语言 数据库 人工智能 大数据云计算 运维技术 操作系统 数据结构与算法 Java C++语言 Python PHP

正则表达式空格,正则表达式空格,汉字

首页>>技术文档>>编程语言

  欢迎关注天善智能微信公众号正则表达式空格,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区。 对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信正则表达式空格:tstoutiao,邀请你进入头条数据爱好者交流群,数据爱好者们都在这儿。

  1.前言

  本人是个学生党,在过两年就要研究生毕业正则表达式空格了,面临着找工作,相信很多人也面临或者经历过工作,定居租房买房之类的

  在此,我们来采集一下上海在售的二手房信息,有人想问,为啥不采集新房?快醒醒吧,新房可远观而不可亵玩焉,一般人都买不起,看的只会心情不好,hhhh

  当然,二手房估计你也买不起正则表达式空格!咱们拿数据说话!

  2.观察网站结构

  以本人所在的城市上海为例,走在上海的大街小巷,你会看到很多做房产中介的,最常见的就是链家了~

  我们进一下链家的上海二手房页面:https://sh.lianjia.com/ershoufang/?utm_source=360&utm_medium=cpp&utm_term=链家二手房交易&utm_content=链家二手房&utm_campaign=品牌词

  有81508套二手房源在出售,这么多!

  3.寻找需要爬取信息

  感觉这些红色框的我都想要,但是感觉还是不够全面,我们点击进去看看详细信息。

  这里面的信息挺全的,当然,我根据需要的数据(可能之后分析需要用到)来选择爬取的数据

  分析网页结构在我之前的文章里有写到,就不赘述了

  传送门:

  Python网络爬虫爬取智联招聘职位:https://ask.hellobi.com/blog/wangdawei/6710

  爬取起点中文网月票榜前500名网络小说介绍:https://ask.hellobi.com/blog/wangdawei/7285

  4.撰写爬虫

#主要程序

import requests

import re

from bs4

import BeautifulSoup

from fake_useragent

import UserAgent ua=UserAgent()

#使用随机header,模拟人类 headers1={

'User-Agent':

'ua.random'}

#使用随机header,模拟人类 houseary=[]

#建立空列表放房屋信息 domain=

'https://sh.lianjia.com'

#为了之后拼接子域名爬取详细信息

for i

in range(

1,

400):

#爬取399页,想爬多少页直接修改替换掉400,不要超过总页数就好 res=requests.get(

'https://sh.lianjia.com/ershoufang/d'+str(i),headers=headers1)

#爬取拼接域名 soup = BeautifulSoup(res.text,

'html.parser')

#使用html筛选器

#print(soup)

for j

in range(

0,

29):

#网站每页呈现30条数据,循环爬取 url1=soup.select(

'.prop-title a')[j][

'href']

#选中class=prop-title下的a标签里的第j个元素的href子域名内容 url=domain+url1

#构造子域名 houseary.append(gethousedetail1(url,soup,j))

#传入自编函数需要的参数

defgethousedetail1(url,soup,j):

#定义函数,目标获得子域名里的房屋详细信息 info={}

#构造字典,作为之后的返回内容 s=soup.select(

'.info-col a')[

1+

3*j]

#通过传入的j获取所在区的内容 pat=

'<a.*?>(.*?)</a>'

#构造提取正则 info[

'所在区']=

''.join(list(re.compile(pat).findall(str(s))))

#使用join将提取的列表转为字符串 s1=soup.select(

'.info-col a')[

0+

3*j]

#[0].text.strip() pat1=

'<span.*?>(.*?)</span>' info[

正则表达式空格,正则表达式空格,汉字

'具体地点']=

''.join(list(re.compile(pat1).findall(str(s1)))) s2=soup.select(

'.info-col a')[

正则表达式空格,正则表达式空格,汉字

2+

3*j]

#[0].text.strip() pat2=

'<a.*?>(.*?)</a>' info[

'位置']=

''.join(list(re.compile(pat2).findall(str(s2)))) q=requests.get(url)

#使用子域名 soup=BeautifulSoup(q.text,

'html.parser')

#提取子域名内容,即页面详细信息

for dd

in soup.select(

'.content li'):

#提取class=content标签下的li标签房屋信息 a=dd.get_text(strip=

True)

#推荐的去空格方法,比strip()好用

if

':'

in a:

#要有冒号的,用中文的冒号,因为网页中是中文 key,value=a.split(

':')

#根据冒号切分出键和值 info[key]=value info[

'总价']=soup.select(

'.bold')[

0].text.strip()

#提取总价信息

return info

#传回这一个页面的详细信息

  写了详细注释,相信萌萌的你可以看懂~

  我们来看一下爬的结果:

houseary#看一下列表信息

  就是将每次爬取的信息做成dict依次添加在list中

  接下来使用pandas神器~

import pandas

#pandas大法好 df=pandas.DataFrame(houseary) df

  然后存到本地

df.to_excel('house_lianjia.xlsx')

  考虑到主程序写了双重for循环,函数里写了循环,所以时间复杂度是O(n^3),对于一个算法,一般是不可以接受的,好吧,萌萌的我只能接受,如果你问我为什么,我只能说,我写不出低复杂度的了。。。爬了这1w+条数据用了我1小时时间。。。各位dalao如果有方法可以指点一下,之后我想学习多线程提高爬取速度~

  最后存到本地excel文件中

df.to_excel('house_lianjia.xlsx')

  5.结语

  看到这价格是不是有句mmp想说

  转载请保留以下内容:

  本文来源自天善社区ID王大伟老师的博客(公众号)。

  原文链接: https://ask.hellobi.com/blog/wangdawei/7570

上一篇: 如何打开jsp,如何打开PPT演讲者模式

下一篇: 诺森德的糖果,诺森德烹饪配方