python爬虫58同城(多个信息一次爬取) - Go语言中文社区

python爬虫58同城(多个信息一次爬取)



有网友留言说,这个代码已经不能爬取了,我2018.11.9号查看了一下,加了一个异常处理try,现在可以用了,原因是有的信息里面的标签由于促销价格被修改为别的了,所以爬取不到就会出错。现在 我将修改后的代码替换掉原有的爬取一整页的代码 以及 错误的图片比较

一、先爬取内容中的一项

网址如下:
URL = ‘
https://bj.58.com/pingbandiannao/35923077687887x.shtml?psid=157596847202024134799949907&entinfo=35923077687887_p&slot=-1&iuType=p_1&PGTID=0d305a36-0000-19ea-0c77-0ae8025ace4f&ClickID=2
在这里插入图片描述

先爬取一项的代码

代码中soup.select(),不明白的地方,我后续将详细解释,爬出来是空列表的情况。

import requests
from bs4 import BeautifulSoup

URL = 'https://bj.58.com/pingbandiannao/35923077687887x.shtml?psid=157596847202024134799949907&entinfo=35923077687887_p&slot=-1&iuType=p_1&PGTID=0d305a36-0000-19ea-0c77-0ae8025ace4f&ClickID=2'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36' }
wb_data = requests.get(URL,headers=headers)
soup = BeautifulSoup(wb_data.content, 'lxml')
#print(soup)
NameList = soup.select('h1.detail-title__name')
ProductName = NameList[0].text.strip()
PriceList = soup.select('span.infocard__container__item__main__text--price')
ProductPrice = PriceList[0].text.strip()
ViewList = soup.select('div.infocard__container__item__main')
ProductView = ViewList[1].text
AreaList = soup.select('div.infocard__container__item__main > a')
ProductArea = AreaList[0].text+'-'+AreaList[1].text
SellerNameList = soup.select('div.infocard__container__item__main > a')
SellerName = SellerNameList[2].text
CatalogueList = soup.select('div.nav > a')
Catalogue = CatalogueList[-1].text

data_dict = {
    '产品类别': Catalogue,
    '产品名称': ProductName,
    '产品价格': ProductPrice,
    '产品成色': ProductView,
    '产品区域': ProductArea,
    '卖家姓名': SellerName
}
print(data_dict)

注意headers需要修改成自己电脑的,详见我的博客【python爬虫–招聘信息】->headers错误信息,如果不写headers会被反爬取。

爬去一项的结果

{'产品类别': '北京平板电脑', '产品名称': 'surface pro5 I5 8G 128G, 全新未拆封', '产品价格': '5000 元', '产品成色': '全新', '产品区域': '通州-马驹桥', '卖家姓名': '张先生'}

二、爬取一整页

url = ‘https://bj.58.com/pingbandiannao/?PGTID=0d409654-017a-3436-09be-f01fa1e2217f&ClickID=13
在这里插入图片描述

一整页代码

import requests
from bs4 import BeautifulSoup

#得到每个的详细信息
def get_info(URL):
    #URL = 'https://bj.58.com/pingbandiannao/35923077687887x.shtml?psid=157596847202024134799949907&entinfo=35923077687887_p&slot=-1&iuType=p_1&PGTID=0d305a36-0000-19ea-0c77-0ae8025ace4f&ClickID=2'
    headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36' }
    try:
        wb_data = requests.get(URL,headers=headers)
        soup = BeautifulSoup(wb_data.content, 'lxml')
        #print(soup)
        NameList = soup.select('h1.detail-title__name')
        ProductName = NameList[0].text.strip()
        PriceList = soup.select('span.infocard__container__item__main__text--price')
        ProductPrice = PriceList[0].text.strip()

        AreaList = soup.select('div.infocard__container__item__main > a')
        ProductArea = AreaList[0].text.strip()+'-'+AreaList[1].text.strip()
        SellerNameList = soup.select('div.infocard__container__item__main > a')
        SellerName = SellerNameList[2].text
        CatalogueList = soup.select('div.nav > a')
        Catalogue = CatalogueList[-1].text

        data_dict = {
            '产品类别': Catalogue,
            '产品名称': ProductName,
            '产品价格': ProductPrice,
            '产品区域': ProductArea,
            '卖家姓名': SellerName
        }
        print(data_dict)
    except:
        print('此项信息被修改,所以爬取错误') #不想看到这句话,可以写pass

#get_info()

'''
下面是得到一整页中每个卖家信息的链接,这里只爬取了第一页中的全部信息,
也可以爬取好多页。只需要将下方的url中根据每页信息的不同变化相应的数字页码。
'''
def get_all_info():
    url = 'https://bj.58.com/pingbandiannao/?PGTID=0d409654-017a-3436-09be-f01fa1e2217f&ClickID=13'
    headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36' }
    wb_data = requests.get(url,headers=headers)
    soup = BeautifulSoup(wb_data.text, 'lxml')
    GetLink = soup.select('td.t > a')
    #print(GetLink)
    for i in GetLink:
        link = i.get('href')  #得到href链接
        #删选是平板电脑的链接
        if 'pingbandiannao' in link:
            get_info(link)

get_all_info()

一整页的全部信息结果

{'产品类别': '北京平板电脑', '产品名称': '上门回收IPAD平板电脑 IPHONE全系列', '产品价格': '4999 元', '产品区域': '北京-邢先生', '卖家姓名': ''}
此项信息被修改,所以爬取错误
{'产品类别': '北京平板电脑', '产品名称': '展柜展示柜钛合金展柜精品展柜珠宝玉器展柜化妆品展柜', '产品价格': '面议', '产品区域': '东城-东城周边', '卖家姓名': '徐经理'}
{'产品类别': '北京平板电脑', '产品名称': '联想Yogabook Android 128G 雅黑色', '产品价格': '2000 元', '产品区域': '朝阳-望京', '卖家姓名': '胡先生'}
此项信息被修改,所以爬取错误
此项信息被修改,所以爬取错误
此项信息被修改,所以爬取错误
{'产品类别': '北京平板电脑', '产品名称': '戴尔i7吃鸡游戏', '产品价格': '2800 元', '产品区域': '朝阳-东坝', '卖家姓名': 's***0'}
{'产品类别': '北京平板电脑', '产品名称': '古董私人收购 玉器瓷器青铜器古币字画 现金结算收购', '产品价格': '99999 元', '产品区域': '北京-陈枫', '卖家姓名': ''}
此项信息被修改,所以爬取错误
{'产品类别': '北京平板电脑', '产品名称': '转让带车指标的公司', '产品价格': '1 元', '产品区域': '朝阳-安贞', '卖家姓名': '郭先生'}
此项信息被修改,所以爬取错误
{'产品类别': '北京平板电脑', '产品名称': '华为荣耀畅玩二平板电脑', '产品价格': '650 元', '产品区域': '石景山-金顶街', '卖家姓名': 'z***3'}
{'产品类别': '北京平板电脑', '产品名称': 'Lenovo/联想 Miix5 I5 转卖~', '产品价格': '4396 元', '产品区域': '石景山-衙门口', '卖家姓名': 'l***8'}
{'产品类别': '北京平板电脑', '产品名称': '九成新转让平板电脑', '产品价格': '1600 元', '产品区域': '昌平-沙河', '卖家姓名': 'm***t'}
{'产品类别': '北京平板电脑', '产品名称': '公司发的福利,一共两台,出售一台', '产品价格': '1200 元', '产品区域': '丰台-蒲黄榆', '卖家姓名': 'e***6'}
{'产品类别': '北京平板电脑', '产品名称': '全新未拆封微软Surface Por电脑', '产品价格': '6000 元', '产品区域': '朝阳-大屯', '卖家姓名': 'q***8'}
此项信息被修改,所以爬取错误
{'产品类别': '北京平板电脑', '产品名称': '三星TAB3 16G 8.1寸', '产品价格': '500 元', '产品区域': '大兴-观音寺', '卖家姓名': 's***5'}
{'产品类别': '北京平板电脑', '产品名称': '小米平板便宜出需要的联系我', '产品价格': '500 元', '产品区域': '顺义-李桥', '卖家姓名': 'f***6'}
{'产品类别': '北京平板电脑', '产品名称': '电影孩子学习有帮助', '产品价格': '1499 元', '产品区域': '房山-阎村', '卖家姓名': 'h***r'}
此项信息被修改,所以爬取错误
{'产品类别': '北京平板电脑', '产品名称': 'surfacePro4全新基本未用', '产品价格': '4300 元', '产品区域': '丰台-丽泽桥', '卖家姓名': '1***h'}
{'产品类别': '北京平板电脑', '产品名称': '个人全新Ipad Pro转让', '产品价格': '3666 元', '产品区域': '丰台-马家堡', '卖家姓名': 'o***4'}
{'产品类别': '北京平板电脑', '产品名称': '华为P20亮黑色', '产品价格': '3300 元', '产品区域': '朝阳-大山子', '卖家姓名': 'n***9'}
{'产品类别': '北京平板电脑', '产品名称': '处理老台式显示器', '产品价格': '150 元', '产品区域': '朝阳-甘露园', '卖家姓名': 'x***3'}
{'产品类别': '北京平板电脑', '产品名称': '转全新国行未拆封ipad一台', '产品价格': '2150 元', '产品区域': '朝阳-北苑', '卖家姓名': '小***滔'}
{'产品类别': '北京平板电脑', '产品名称': '自用ipad air2 wifi版', '产品价格': '1800 元', '产品区域': '海淀-马连洼', '卖家姓名': '1***o'}
{'产品类别': '北京平板电脑', '产品名称': '海尔品牌一体电脑', '产品价格': '260 元', '产品区域': '昌平-城北', '卖家姓名': 'z***1'}

Process finished with exit code 0

图片比较:
这里的标签被网页改了,所以以前的代码会报错
在这里插入图片描述
------------------------------------------------------------------------------------
谢谢支持,亲测运行成功。注意更改headers,(好像不修改也可以用)!

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_43371004/article/details/83720426
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢