python爬虫学习笔记(4)

学习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格式文件部分截图如下在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值