Python 爬虫学习4

来源:互联网 发布:对淘宝客服的理解 编辑:程序博客网 时间:2024/06/13 13:34

任务:爬取58页面中的正常商品,每个商品详情页中的类目、标题、发帖时间、价格、成色、区域、浏览量信息

注意:多开反爬取、看是个人还是商家(url中的0和1)

详情页中的标题

待改进,'http://bj.58.com/pingbandiannao/{}/pn2,这是第二页的,第一页的每个详情页的链接爬不了(问题出在第一页趴下来的关于详情页链接有问题,第一页不同于后面页,后面页也有不同的,都是截取链接时要注意截取的标志是什么),浏览量还没成功

 

from bs4 import BeautifulSoupimport requestsheaders = {    'User-Agent':'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}# url = 'http://bj.58.com/pingbandiannao/26062681492781x.shtml'# wb_data = requests.get(url)# soup = BeautifulSoup(wb_data.text, 'lxml')def get_links_from(who_sells):      #在列表页获取链接    urls = []    url = 'http://bj.58.com/pingbandiannao/{}x.shtml'    list_view = 'http://bj.58.com/pingbandiannao/{}/pn1/'.format(str(who_sells))    wb_data = requests.get(list_view)    soup = BeautifulSoup(wb_data.text, 'lxml')    for link in soup.select('td.t a.t'):        urls.append(url.format(link.get('href').split('=')[-1].split('_')[0]) )    #指定字符串以?分为两部分,因为第一页和后续页数有不同的格式,所以找到他们之间通用的格式    return urls    # print(urls)'''http://bj.58.com/pingbandiannao/29292515289012x.shtml?psid=159059162195147270219031821&entinfo=29292515289012_0http://bj.58.com/pingbandiannao/26213204416840x.shtml?psid=159059162195147270219031821&entinfo=26213204416840_0&iuType=p_1&PGTID=0d305a36-0000-1fe0-6998-6f094bc793e8&ClickID=1'''def get_views_from(url):    id = url.split('/')[-1].strip('x.shtml')        #获取每一个详情页的唯一特性    api = 'http://jst1.58.com/counter?infoid={}'.format(id)    js = requests.get(api, headers=headers)    views = js.text.split('=')[-1]    return views    # print(views)def get_item_info(who_sells=1):     #详情页,who_sells = 1 是商家    urls = get_links_from(who_sells)    for url in urls:        wb_data = requests.get(url)        soup = BeautifulSoup(wb_data.text, 'lxml')        title = soup.title.text     #直接在标题中找        price = soup.select('span.price')     #大型网络直接copy的select太复杂,采取简化,详情页简单,“#”代表id        print(price)        date = soup.select('.time')        view = soup.select('em#totalcount')        # area = soup.select('span.c_25d')        data = {        #转转网的几个参数会不同,目前不考虑转转网的            'title':title,            'price':soup.select('span.price')[0].text,      #单一元素,一个列表中只有一个元素,取出来的是标签,进行text            'date':date[0].text,            'area':list(soup.select('.c_25d')[0].stripped_strings) if soup.find_all('span','c_25d') else None,            'cata':'个人'if who_sells == 0 else'商家',     #分类,商家还是个人            'views':get_views_from(url)     #浏览量,js请求,浏览量在source中        }        print(data)# get_item_info(url)# get_links_from(1)# get_views_from(url)get_item_info()


 
                                             
0 0