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

这篇具有很好参考价值的文章主要介绍了python爬取网站数据(含代码和讲解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

文章目录

前言

一、数据采集的准备

1.观察url规律

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

二、数据采集

1. 建立存放数据的dataframe

2. 开始爬取

3. 把数据导出成csv表格

总结


前言

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

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

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

python爬取网页数据代码,python,javascript,jupyter

一、数据采集的准备

1.观察url规律

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

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

python爬取网页数据代码,python,javascript,jupyter

 利用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 etree
import requests
from fake_useragent import UserAgent
import pandas as pd
import random
import time
import csv

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

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

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

# 设置请求头参数:User-Agent, cookie, referer
headers = {
    '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/'# 首页网址URL
page_text = requests.get(url=url, headers=headers).text# 请求发送
tree = etree.HTML(page_text)#数据解析

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

python爬取网页数据代码,python,javascript,jupyter

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

【腾讯文档】获取具体爬取位置的讲解
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)

python爬取网页数据代码,python,javascript,jupyter

总结

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

我会继续优化这个方法的~文章来源地址https://www.toymoban.com/news/detail-808618.html

到了这里,关于python爬取网站数据(含代码和讲解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python实战:用Selenium爬取网页数据

    网络爬虫是Python编程中一个非常有用的技巧,它可以让您自动获取网页上的数据。在本文中,我们将介绍如何使用Selenium库来爬取网页数据,特别是那些需要模拟用户交互的动态网页。 Selenium是一个自动化测试工具,它可以模拟用户在浏览器中的操作,比如点击按钮、填写表

    2024年02月06日
    浏览(48)
  • Python 爬虫:如何用 BeautifulSoup 爬取网页数据

    在网络时代,数据是最宝贵的资源之一。而爬虫技术就是一种获取数据的重要手段。Python 作为一门高效、易学、易用的编程语言,自然成为了爬虫技术的首选语言之一。而 BeautifulSoup 则是 Python 中最常用的爬虫库之一,它能够帮助我们快速、简单地解析 HTML 和 XML 文档,从而

    2024年02月04日
    浏览(65)
  • Python网络爬虫逆向分析爬取动态网页、使用Selenium库爬取动态网页、​编辑将数据存储入MongoDB数据库

    目录 逆向分析爬取动态网页 了解静态网页和动态网页区别 1.判断静态网页  2.判断动态网页  逆向分析爬取动态网页 使用Selenium库爬取动态网页 安装Selenium库以及下载浏览器补丁 页面等待  页面操作 1.填充表单 2.执行JavaScript 元素选取 Selenium库的find_element的语法使用格式如下

    2024年02月15日
    浏览(119)
  • python爬取招聘网站数据

    这段代码是使用Selenium自动化测试模块进行网页爬取的示例代码。它通过模拟人的行为在浏览器中操作网页来实现爬取。具体的流程如下: 导入所需的模块,包括Selenium、时间、随机、csv等模块。 打开浏览器,创建一个Chrome浏览器实例。 设置要爬取的页数范围。 循环遍历每

    2024年02月02日
    浏览(68)
  • 如何利用python爬取网站数据

    Python是一种非常适合用于网络爬虫的编程语言,以下是Python爬取网站数据的步骤: 1. 确定目标网站和所需数据:首先要找到需要爬取数据的网站,确定你需要爬取的数据是哪一部分。 2. 发送请求:使用Python中的requests库向目标网站发送请求,获取网站的HTML源码。 3. 解析HTM

    2024年02月06日
    浏览(43)
  • 轻松爬取网页数据:低代码&零编程技巧的自动化爬虫神器!

    在以前的文章中,我们学习了通过playwright+python+requests可以实现绕过浏览器鉴权进行接口请求。 在曾经的一次数据爬取的时候,我尝试去获取Boss直聘的岗位信息,可是很不巧,boss直聘的反爬机制把我的IP直接封了,妙啊。 在这里给大家推荐一款工具:亮数据。 他可以使用真

    2024年02月03日
    浏览(52)
  • Python爬虫|使用Selenium轻松爬取网页数据

    1. 什么是selenium? Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作浏览器一样。支持的浏览器包括IE,Firefox,Safari,Chrome等。 Selenium可以驱动浏览器自动执行自定义好的逻辑代码,也就是可以通过代码完全模拟成人类使用

    2024年02月04日
    浏览(58)
  • Python爬虫:如何使用Python爬取网站数据

    更新:2023-08-13 15:30 想要获取网站的数据?使用Python爬虫是一个绝佳的选择。Python爬虫是通过自动化程序来提取互联网上的信息。本文章将会详细介绍Python爬虫的相关技术。 在使用Python爬虫之前,我们需要理解网络协议和请求。HTTP是网络传输的重要协议,它是在Web浏览器和

    2024年02月13日
    浏览(49)
  • Python爬虫:为什么你爬取不到网页数据

    前言: 之前小编写了一篇关于爬虫为什么爬取不到数据文章(文章链接为:https://liuze.blog.csdn.net/article/details/105965562),但是当时小编也是胡乱编写的,其实里面有很多问题的,现在小编重新发布一篇关于爬虫爬取不到数据文章,希望各位读者更加了解爬虫。 1. 最基础的爬虫

    2024年02月05日
    浏览(98)
  • 华纳云:Python中如何使用Selenium爬取网页数据

    这篇文章主要介绍“Python中如何使用Selenium爬取网页数据”,在日常操作中,相信很多人在Python中如何使用Selenium爬取网页数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中如何使用Selenium爬取网页数据”的疑惑有所帮助!接下

    2024年02月07日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包