我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python爬取网站数据(含代码和讲解)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python爬取网站数据(含代码和讲解)

提示:本次爬取是利用xpath进行,按文章的顺序走就OK的;

文章目录

前言

一、数据采集的准备

1.观察url规律

2.设定爬取位置和路径(xpath)

二、数据采集

1. 建立存放数据的dataframe

2. 开始爬取

3. 把数据导出成csv表格

总结


前言

这次爬取的网站是房天下网站;

其中包含很多楼盘信息:https://newhouse.fang.com/house/s/b81-b91/

我在网站上进行了一步筛选,即选取北京及北京周边的房源,各位要是想爬取其他城市的房源信息也很简单,改一下url信息即可。

一、数据采集的准备

1.观察url规律

观察到北京及周边地区的房源有很多网页,翻几页就能发现url的规律:

网址就是:https://newhouse.fang.com/house/s/  +  b81-b9X  +  /   ;其中X是页码

 利用for循环遍历所有网页:

for i in range(33): # 每页20个小区,共648个小区    url = 'https://newhouse.fang.com/house/s/b81-b9' + str(i+1) + '/'

pip 安装fake_useragent库:

fake-useragent可以伪装生成headers请求头中的User Agent值,将爬虫伪装成浏览器正常操作。

!pip install fake_useragent

导入接下来会用到的包: 

## 导包from lxml import etreeimport requestsfrom fake_useragent import UserAgentimport pandas as pdimport randomimport timeimport csv

设置请求参数:需要大家替换的有'cookie'和'referer'两项的值:

'cookie':每次访问网站服务器的时候,服务器都会在本地设置cookie,表明访问者的身份。记得每次使用时,都要按照固定方法人工填入一个 cookie。

 'referer':请求参数,标识请求是从哪个页面过来的。

# 设置请求头参数:User-Agent, cookie, refererheaders = {    'User-Agent' : UserAgent().random,    'cookie' : "global_cookie=kxyzkfz09n3hnn14le9z39b9g3ol3wgikwn; city=www; city.sig=OGYSb1kOr8YVFH0wBEXukpoi1DeOqwvdseB7aTrJ-zE; __utmz=147393320.1664372701.10.4.utmcsr=mp.csdn.net|utmccn=(referral)|utmcmd=referral|utmcct=/mp_blog/creation/editor; csrfToken=KUlWFFT_pcJiH1yo3qPmzIc_; g_sourcepage=xf_lp^lb_pc'; __utmc=147393320; unique_cookie=U_bystp5cfehunxkbjybklkryt62fl8mfox4z*3; __utma=147393320.97036532.1606372168.1664431058.1664433514.14; __utmt_t0=1; __utmt_t1=1; __utmt_t2=1; __utmt_t3=1; __utmt_t4=1; __utmb=147393320.5.10.1664433514",    # 设置从何处跳转过来    'referer': 'https://newhouse.fang.com/house/s/b81-b91/'}

具体更改方法请见链接:

【腾讯文档】'cookie'和 'referer'的更改方法:
https://docs.qq.com/doc/DR2RzUkJTQXJ5ZGt6

只能走链接了,一直审核不过555~ 

2.设定爬取位置和路径(xpath)

因为爬取数据主要依托于'目标数据所在位置的确定’,所以一定先要搞清楚目标数据的位置(位于div的哪一块);

先发送请求: 

url = 'https://newhouse.fang.com/house/s/b81-b91/'# 首页网址URLpage_text = requests.get(url=url, headers=headers).text# 请求发送tree = etree.HTML(page_text)#数据解析

我想爬取的数据主要就是:楼盘名称、评论数、房屋面积、详细地址、所在区域、均价 5项数据。

代码已经贴在下面了,具体方法描述还是走个链接: 

【腾讯文档】获取具体爬取位置的讲解
https://docs.qq.com/doc/DR3BFRW1lVGFRU0Na

# 小区名称name = [i.strip() for i in tree.xpath("//div[@class='nlcd_name']/a/text()")]print(name)print(len(name))# 评论数commentCounts = tree.xpath("//span[@class='value_num']/text()")print(commentCounts)print(len(commentCounts))# 房屋面积buildingarea = [i.strip() for i in tree.xpath("//div[@class='house_type clearfix']/text()")]print(buildingarea)print(len(buildingarea))# 详细地址detailAddress = tree.xpath("//div[@class='address']/a/@title")print(detailAddress)print(len(detailAddress))# 所在区district = [i.strip() for i in tree.xpath("//div[@class='address']//span[@class='sngrey']/text()")]print(district)print(len(district))# 均价num = tree.xpath("//div[@class='nlc_details']/div[@class='nhouse_price']/span/text() | //div[@class='nlc_details']/div[@class='nhouse_price']/i/text()")unit = tree.xpath("//div[@class='nlc_details']/div[@class='nhouse_price']/em/text()")price = [i+j for i,j in zip(num, unit)]print(price)print(len(price))

此时采集到的数据还包含着:[]方括号、—横杠、“平米”等符号或者单位,所以要对数据进行简单的split处理,把真正需要的数据提取出来:

# 评论数处理commentCounts = [int(i.split('(')[1].split('条')[0]) for i in commentCounts]print(commentCounts)# 详细地址处理detailAddress = [i.split(']')[1] for i in detailAddress]print(detailAddress)# 所在区字段处理district = [i.split('[')[1].split(']')[0] for i in district]print(district)# 房屋面积处理t = []for i in buildingarea:    if i != '/' and i != '':        t.append(i.split('—')[1].split('平米')[0])print(t)print(len(t))

二、数据采集

1. 建立存放数据的dataframe

df = pd.DataFrame(columns = ['小区名称', '详细地址', '所在区', '均价', '评论数'])df

2. 开始爬取

这里图方便就只爬取了前10页,因为后面的房源就经常少信息,要么没有面积信息,要么没有所在区域。 

for k in range(10):     url = 'https://newhouse.fang.com/house/s/b81-b9' + str(k+1) + '/'     page_text = requests.get(url=url, headers=headers).text #请求发送    tree = etree.HTML(page_text) #数据解析    # 小区名称    name = [i.strip() for i in tree.xpath("//div[@class='nlcd_name']/a/text()")]    # 评论数    commentCounts = tree.xpath("//span[@class='value_num']/text()")    # 详细地址    detailAddress = tree.xpath("//div[@class='address']/a/@title")    # 所在区    district = [i.strip() for i in tree.xpath("//div[@class='address']//text()")]    # 均价    num = tree.xpath("//div[@class='nlc_details']/div[@class='nhouse_price']/span/text() | //div[@class='nlc_details']/div[@class='nhouse_price']/i/text()")    unit = tree.xpath("//div[@class='nlc_details']/div[@class='nhouse_price']/em/text()")    price = [i+j for i,j in zip(num, unit)]    #评论数处理    commentCounts = [int(i.split('(')[1].split('条')[0]) for i in commentCounts]    #详细地址处理    tmp1 = []    for i in detailAddress:        if ']' in i:            tmp1.append(i.split(']')[1])            continue        tmp1.append(i)    detailAddress = tmp1    #所在区处理    tmp2 = []    for i in district:        if ']' in i and '[' in i:            tmp2.append(i.split(']')[0].split('[')[1])    district = tmp2             dic = {'小区名称':name, '详细地址':detailAddress, '所在区':district, '均价':price, '评论数':commentCounts}    df2 = pd.DataFrame(dic)    df = pd.concat([df,df2], axis=0)    print('第{}页爬取成功, 共{}条数据'.format(k+1, len(df2)))    print('全部数据爬取成功')

3. 把数据导出成csv表格

df.to_csv('北京小区数据信息.csv',index=None)

总结

说实话,本文使用的爬取方法简单而且信息正确,但是存在一些不足,比如面对楼盘的部分信息空缺时,就无法按照null来采集,而是会报错,所以我现有的解决方法就是在循环中人工去设置条件,跳过空缺信息。

我会继续优化这个方法的~

来源地址:https://blog.csdn.net/weixin_50706330/article/details/127115265

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python爬取网站数据(含代码和讲解)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

爬取某网站写的python代码

代码如下:import requestsfrom pyquery import PyQueryimport reimport osimport csvimport datetime""" 说明:该代码是专门为爬取http://
2023-06-04

python如何爬取网站数据

Python爬取网站数据Python是一种适用于网站数据爬取的编程语言。它提供广泛的库,如requests、BeautifulSoup、Selenium、lxml和scrapy。爬取过程涉及发送请求、解析响应、提取数据和存储数据。Python爬虫灵活、高效、易于使用,但可能受限于反爬虫措施、数据结构化程度低以及道德和法律问题。最佳实践包括遵循网站条款、使用用户代理、限制频率、处理错误以及合乎道德地存储和使用数据。
python如何爬取网站数据
2024-04-12

Python爬虫爬取美剧网站的实现代码

一直有爱看美剧的习惯,一方面锻炼一下英语听力,一方面打发一下时间。之前是能在视频网站上面在线看的,可是自从广电总局的限制令之后,进口的美剧英剧等貌似就不在像以前一样同步更新了。但是,作为一个宅diao的我又怎甘心没剧追呢,所以网上随便查了一
2022-06-04

怎么用python爬取网站数据

正文一、工具准备Python库:requests、BeautifulSoup4、lxml开发环境:Python3.x、IDE二、步骤详解发送HTTP请求,解析HTML响应提取数据,处理数据解决常见问题:受限网站、复杂结构、动态页面、封禁三、高级技巧多线程爬取、数据库存储分布式爬取、云服务四、应用场景价格比较、新闻聚合社交媒体分析、电子邮件营销搜索引擎优化
怎么用python爬取网站数据
2024-04-13

怎么用python爬取网站数据

要用Python爬取网站数据,可以使用Python的爬虫库来实现。下面是一个简单的示例,使用`requests`库来获取网页内容,使用`BeautifulSoup`库来解析网页。首先,需要先安装`requests`和`beautifulso
2023-09-07

python爬虫爬取网页数据并解析数据

本篇文章给大家带来了关于Python的相关知识,主要介绍了python爬虫如何爬取网页数据并解析数据,帮助大家更好的利用爬虫分析网页,下面一起来看一下,希望对大家有帮助。【相关推荐:Python3视频教程 】1.网络爬虫的基本概念网络爬虫(又称网络蜘蛛,机器人),就是模拟客户端发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序。只要浏览器能够做的事情,原则上,爬虫都能够做到。
2022-08-15

python怎么实现自动登录网站爬取数据

正文本文详细介绍如何使用Python实现在自动登录网站后抓取数据。它涵盖了基础准备、建立会话、解析登录表单、准备登录数据、提交登录表单、验证登录结果和抓取数据等步骤。示例代码演示了如何自动登录网站并抓取目标数据。扩展部分还提供了处理页面重定向、验证码、AJAX调用和会话保持等挑战的技巧。通过结合这些技术,开发人员可以构建强大的自动登录脚本,从而有效地抓取网站数据。
python怎么实现自动登录网站爬取数据
2024-04-12

Python爬虫之使用BeautifulSoup和Requests抓取网页数据

这篇文章主要介绍了Python爬虫之使用BeautifulSoup和Requests抓取网页数据,本篇文章将介绍如何使用Python编写一个简单的网络爬虫,从网页中提取有用的数据,需要的朋友可以参考下
2023-05-14

使用Python和Scrapy实现抓取网站数据

目录一、安装Scrapy二、创建一个Scrapy项目三、定义一个Scrapy爬虫四、运行Scrapy爬虫五、保存抓取的数据六、遵守网站的robots.txt七、设置下载延迟八、使用中间件和管道九、结论在本文中,我们将介绍如何使用Python
2023-05-12

R语言怎样抓取某网站JSON数据的代码

R语言怎样抓取某网站JSON数据的代码,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。R语言抓取某网站JSON数据的代码如下:library(RCurl)library(bi
2023-06-02

python如何使用XPath解析数据爬取起点小说网数据

小编给大家分享一下python如何使用XPath解析数据爬取起点小说网数据,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python的数据类型有哪些?python
2023-06-14

Python爬虫之怎么使用BeautifulSoup和Requests抓取网页数据

这篇文章主要介绍了Python爬虫之怎么使用BeautifulSoup和Requests抓取网页数据的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python爬虫之怎么使用BeautifulSoup和Reque
2023-07-05

Python读取Hive数据库实现代码详解

这篇文章主要介绍了Python读取Hive数据库实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-03-01

python Selenium爬取内容并存储至MySQL数据库的实现代码

前面我通过一篇文章讲述了如何爬取CSDN的博客摘要等信息。通常,在使用Selenium爬虫爬取数据后,需要存储在TXT文本中,但是这是很难进行数据处理和数据分析的。这篇文章主要讲述通过Selenium爬取我的个人博客信息,然后存储在数据库M
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录