python爬虫学习笔记(4)

本文介绍使用PyQuery库实现的简单爬虫代码,用于抓取南昌新房楼盘详细信息,包括名称、评论数、面积、地址及价格。通过改进代码,实现了多页数据的爬取并将结果保存为CSV文件。

学习pyquery后写的一个简单的爬虫代码

from pyquery import PyQuery as pq
import requests
import random

url = "https://nc.newhouse.fang.com/house/s/b91/?ctm=1.nc.xf_search.page.1"

h_list = [
          {"User-Agent":"Mozilla/5.0"},
          {"User-Agent":"Mozilla/4.0"},
          {"User-Agent":"Mozilla/3.0"},
    ]
headers = random.choice(h_list)

res = requests.get(url,headers=headers)
print(res.status_code)
res.encoding = 'gb2312'
doc = pq(res.text)
#doc = pq(url,encoding='gb2312')
html = doc('ul .nlc_details')
for item in html.items():
    name = item.find('.nlcd_name a').text()
    commits = item.find('.value_num').text()
    size = item.find('.house_type').text()
    address = item.find('.address').text()
    price = item.find('.nhouse_price').text()
    print(name+'\t'+commits+'\t'+size+'\t'+address+'\t'+price)

结果输出为

200
龙湖春江悦茗 (25条评论) 3居/ 4居 - 93~125平米 [新建区] 长富大道777号 11500元/�O
洪大新力合悦滨江 (17条评论) 3居 - 102~128平米 [南昌县] 沿江南大道与东岳大道交汇处 14500元/�O
金茂宸南里 (8条评论) 3居/ 4居 - 89~125平米 [南昌县] 昌南汽车大道 价格待定
华侨城万科世纪水岸 (286条评论) 3居/ 4居 - 89~167平米 [西湖区] 南昌市西湖区云锦路1888号 19000元/�O
联泰滨江中心 (36条评论) 1居 - 49~55平米 [红谷滩区] 赣江南大道与前湖大道交接处 12500元/�O
联发万科西岸春风 (25条评论) 3居/ 4居 - 89~145平米 [红谷滩区] 规划路以西、龙兴大街以北 14300元/�O
联发万科海上明月 (70条评论) 3居/ 4居 - 89~167平米 [高新开发区] 艾溪湖北路与创新二路交汇处 15700元/�O
南昌恒大珑庭・�B庭 (256条评论) 3居/ 4居 - 102~141平米 [南昌县] 振兴大道与澄湖东路交会处 12800元/�O
绿地儒乐星镇 (107条评论) 3居/ 4居 - 100~155平米 [赣江新区] 儒乐湖新城金山大道2333号。 12500元/�O
融创雪个庭 (136条评论) 4居/ 5居 - 125~150平米 [青云谱区] 子真路188号 16000元/�O
鸿海万科天空之城 (450条评论) 3居/ 4居 - 89~125平米 [南昌县] 迎宾中大道与富山五路交汇处(莲塘大润发… 14000元/�O
金地中奥九颂・都会之光 (16条评论) 3居 - 89~109平米 [新建区] 红谷滩西・吾悦广场旁・工业三路与文化… 价格待定
春天里 (16条评论) 3居 - 89~113平米 [新建区] 长征西路与麦山路交汇处 价格待定
中大汇 (13条评论) 3居 - 104~125平米 [青云谱区] 象湖公园东・施尧路与京山南路交汇处 价格待定
蓝城巴夫洛 (15条评论) 2居/ 3居/ 4居 - 84~164平米 中国江西昌西文化产业园迎宾路166号 价格待定
绿地悦滨江 (51条评论) 3居/ 4居 - 100~139平米 [南昌县] 抚生西路 12000元/�O
世茂泰禾江南院子 (44条评论) 4居 - 130~168平米 [南昌县] 迎宾南大道999号翠林南路 230万元/套
南昌恒大林溪府 (348条评论) 3居/ 4居 - 93~200平米 [湾里区] 南昌二十八中湾里校区隔壁 9600元/�O
南昌融创文旅城 (986条评论) 3居 - 125~128平米 [红谷滩区] 南龙蟠街与赣江南大道交汇处 16500元/�O
保利和光 (87条评论) 3居/ 4居 - 95~136平米 [青云谱区] 城南大道与墅溪路交汇处向西300米。 12500元/�O

在进行学习并且多次爬取信息的时候,爬取该网站信息有时会返回ParserError: Document is empty的错误,但是多爬几次还是会有成功的。
另外依然出现有一个字乱码,以及‘㎡’这个字符乱码现象

对上面代码再次改进,爬取多页数据,并并csv格式保存至文件

from pyquery import PyQuery as pq
import requests
import random
import csv

def getText(url,headers,write):
    res = requests.get(url,headers=headers)
    print(res.status_code)
    #res.encoding = 'gb2312'
    doc = pq(res.text)
    doc = pq(url,encoding='gb2312')
    html = doc('ul .nlc_details')
    print('正在写入文件。。。')
    for item in html.items():
        name=item.find('.nlcd_name a').text()
        commits=item.find('.value_num').text()
        size=item.find('.house_type').text()
        address=item.find('.address').text()
        price=item.find('.nhouse_price').text()
        #print(name+'\t'+commits+'\t'+size+'\t'+address+'\t'+price)
        row = (name,address,commits,size,price)
        write.writerow(row)


url1 = "https://nc.newhouse.fang.com/house/s/b9"
url2 = "/?ctm=1.nc.xf_search"

h_list = [
          {"User-Agent":"Mozilla/5.0"},
          {"User-Agent":"Mozilla/4.0"},
          {"User-Agent":"Mozilla/3.0"},
    ]
headers = random.choice(h_list)

fp = open('南昌新房楼盘数据.csv', 'a', newline='',encoding = 'utf-8')
write = csv.writer(fp)
name = '楼盘'
commits = '评论数'
size = '面积'
address = '地址'
price = '价位'
row = (name,address,commits,size,price)
write.writerow(row)
for num in range(1,20):
    print("正在爬取第"+str(num)+"页内容。。。")
    url = url1 + str(num) + url2
    getText(url,headers,write)

fp.close()

运行结果

。。。。。。。
正在爬取第16页内容。。。
200
正在写入文件。。。
正在爬取第17页内容。。。
200
正在写入文件。。。
正在爬取第18页内容。。。
200
正在写入文件。。。
正在爬取第19页内容。。。
200
正在写入文件。。。

最后保存的csv格式文件部分截图如下在这里插入图片描述
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值