python3.4+selenium爬58同城(一)

爬取http://bj.58.com/pbdn/0/pn2/中除转转、推广商品以外的产品信息,因为转转和推广的详情信息不规范,需要另外写一个方法存放,后期补上,详情页如下

这周学习了爬虫,但是遇到一些js,requests方法无法渲染,比如浏览量,所以结合selenium+phantomjs渲染网页,获取信息

上代码,注释中详细解释:

from selenium import webdriverfrom bs4 import BeautifulSoupimport re

class GetPageInfo(object):
‘这个类主要是定义爬网页的方法,定义一个规范,以后爬取网页方法就重写这个类就行’    def index_page(self):        ‘获取所有每个网页的url‘
        ‘这周暂时只爬取一页的所有记录详细信息,所以该方法暂时不用’        pass    def detail_page(self):        ‘从每个index_page中,获取每个网页的每条记录的url‘        pass    def domain_page(self):        ‘从每个detail_page中,获取每条记录的详细信息‘

class TongChengFirstHomework(GetPageInfo):    #传入一个浏览器    def __init__(self,browser=None):        self.browser= browser  #初始化一个浏览器    def detail_page(self,whoshell=0,page=1):        ‘woshell:0代表个人销售,1代表商家销售;page当前页‘        #http://sz.58.com/pbdn/0/pn1/        url= ‘http://sz.58.com/pbdn/{}/pn{}/‘.format(str(whoshell),str(page))    
        #此处使用了format函数,详细用法可以找找百度        browser.get(url) #打开网页         html = browser.page_source  #获取网页的所有内容        soup = BeautifulSoup(html,‘lxml‘) #用BeautifulSoup解析网页,转回我们平时熟悉的爬虫方法        detail_urls = soup.select(‘#infolist a.t‘)  #获取某一页下的所有记录        detail_url_list=[]        for row in detail_urls:            detail_url = row.get(‘href‘)            if (‘Mzhuanzhuan‘ not in str(detail_url)) and (‘jump‘ not in detail_url):                    #获取每一条记录的url                detail_url_list.append(detail_url)        print(detail_url_list)        return detail_url_list

    def domain_page(self,detail_url):        detail = {} #用来存放详细信息的字典

        browser.get(detail_url)          html = browser.page_source         soup = BeautifulSoup(html,‘lxml‘)         desc_product = soup.select(‘div.col_sub.sumary > ul > li:nth-of-type(2) > div.su_con > span‘)        detail={            "provice":soup.select(‘.crb_i > a‘)[0].get_text(),            "title":soup.select(‘#content > div.person_add_top.no_ident_top > div.per_ad_left > div.col_sub.mainTitle > h1‘)[0].get_text(),            "date":soup.select(‘.time‘)[0].get_text(),            "views":soup.select(‘#totalcount‘)[0].get_text(),            "price":soup.select(‘span.price.c_f50‘)[0].get_text(),            "condition":list(desc_product[0].stripped_strings) if ‘-‘ not in str(soup.select(‘div.col_sub.sumary > ul > li:nth-of-type(2) > div.su_con > span‘)) else None,            "area":list(soup.select(‘.c_25d‘)[0].stripped_strings) if soup.find_all(‘span‘,‘c_25d‘) else None,             #这里是可以直接在字典里使用if函数,类似列表解析式            "seller":soup.select(‘#divContacter > ul > ul > li > a‘)[0].get_text(),        }        print(detail)        return detail #返回所有详细信息

try:    cap = webdriver.DesiredCapabilities.PHANTOMJS #DesiredCapabilities是一个字典,可以对浏览器进行设置

    cap[‘phantomjs.page.settings.loadImages‘]=False #设置浏览器不加载图片    cap[‘phantomjs.page.settings.userAgent ‘]="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36" #设置useragent    cap[‘phantomjs.page.settings.diskCache‘] =True #设置浏览器开启缓存    browser = webdriver.PhantomJS(desired_capabilities=cap)  #使用desired_capabilities初始化浏览器    tongcheng=TongChengFirstHomework(browser)  #实例一个tongchengfirskhomework对象    for detail_page in tongcheng.detail_page(page=2):        tongcheng.domain_page(detail_page)        print(detail_page)

finally:    browser.close() #记得要关掉浏览器
 
时间: 2024-12-18 05:24:09

python3.4+selenium爬58同城(一)的相关文章

用Python写爬虫爬取58同城二手交易数据

爬了14W数据,存入Mongodb,用Charts库展示统计结果,这里展示一个示意 模块1 获取分类url列表 from bs4 import BeautifulSoup import requests,pymongo main_url = 'http://bj.58.com/sale.shtml' client = pymongo.MongoClient('localhost',27017) tc_58 = client['58tc'] tab_link_list = tc_58['link_

利用python爬取58同城简历数据

最近接到一个工作,需要获取58同城上面的简历信息(http://gz.58.com/qzyewu/).最开始想到是用python里面的scrapy框架制作爬虫.但是在制作的时候,发现内容不能被存储在本地变量 response 中.当我通过shell载入网页后,虽然内容能被储存在response中,用xpath对我需要的数据进行获取时,返回的都是空值.考虑到数据都在源码中,于是我使用python里的beautifulSoup通过下载源码的方式去获取数据,然后插入到数据库. 需要的python包ur

58同城南京品牌公馆数据爬取

做一个租房信息的网站,要爬取58同城上南京品牌公馆的房源信息,因为数字被重新编码了,折腾了一天,记录一下整个过程,留着后面使用. 1,网页分析和字体文件反爬 简单看了下url(https://nj.58.com/pinpaigongyu/pn/1/),比较简单,替换下网址中页码数,就可以一直翻页并进行爬取.分析了下源代码需要爬取的信息,如下图所示,有一些怪异的汉字,刚开始以为是编码问题,后来看了下爬取下来的网页,发现是数字被替换了,应该是有特殊的字体文件. 在script标签中找了一会,发现了下

开源项目-类似58同城的项目启动

已经进入编程这行已经3年,最近想做一个自己的开源项目,最后选来选去,选中了类似58同城的功能的项目作为开始 下面是一些列的工作,里面会体系我是怎样把这个项目做出来,包括思路.技术.代码等等. 需求阶段-需求比较明确,就是仿制58同城功能,这里说明一下,只是功能,相应的优化没有,因为优化都是在有瓶颈的条件下才优化 技术选型-python与php, python作为爬虫的技术,因为一开始没有什么数据,所以使用爬虫技术暂时把58上面的数据爬过来使用,当然这是学习性质,不盈利,特说明,如果58同城方面有

python+selenium爬取百度文库不能下载的word文档

有些时候我们需要用到百度文库的某些文章时,却发现需要会员才能下载,很难受,其实我们可以通过爬虫的方式来获取到我们所需要的文本. 工具:python3.7+selenium+任意一款编辑器 前期准备:可以正常使用的浏览器,这里推荐chrome,一个与浏览器同版本的驱动,这里提供一个下载驱动的链接https://chromedriver.storage.googleapis.com/77.0.3865.40/chromedriver_win32.zip 首先我们来看一下百度文库中这一篇文章https

58同城2015校招笔试、一面、二面经历

10.18 宣讲 58宣讲时间真是安排的晚...19.30开始,我6.30就到了..整整放了1个小时不重复的视频.....我听完他们CSO对行业和公司的介绍就走了.感觉58可能是o2o的下一个爆发点.感觉蛮有前景的.宣讲会也是和小米的宣讲差不多,过道上都挤满了人这种.我个人还是比较些向往去58的.个人感觉对于O2O,58算是赶了个早集..把最脏最累的活给做了..反而是美团,大众点评这种抓住了热点...当然,未来的大趋势也是O2O,就看58能不能赶上这趟快车了. 10.19 笔试 昨天的唯品会和中

[Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)

一. 文章介绍 前一篇文章"[python爬虫] Selenium爬取新浪微博内容及用户信息"简单讲述了如何爬取新浪微博手机端用户信息和微博信息. 用户信息:包括用户ID.用户名.微博数.粉丝数.关注数等. 微博信息:包括转发或原创.点赞数.转发数.评论数.发布时间.微博内容等. 它主要通过从文本txt中读取用户id,通过"URL+用户ID" 访问个人网站,如柳岩: http://weibo.cn/guangxianliuya 因为手机端数据相对精简简单,所以采用输

用selenium爬取淘宝美食

'''利用selenium爬取淘宝美食网页内容''' import re from selenium import webdriver from selenium.common.exceptions import TimeoutException from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.su

秉持H2H理念,58同城如何在移动互联网时代开拓市场

移动互联网时代汹涌而来,Human to Human的这一时代落点会给58同城带来怎样的前景?BAT入驻生活服务领域,58同城如何在压力中实现自己的以人为本之路,将H2H的理念贯彻,让生活更简单的企业定位得以实现? 一.              纵观互联网的发展,变革就是以人为中心 纵观我国不可撼动的BAT,百度致胜的是人与信息,腾讯致胜的是人与社交,阿里致胜的则是人与商品.那么作为移动互联网正在迅速崛起,人与人之间联系日渐加深的移动互联网时期,生活服务的便利性逐渐被人们重视起来,嘀嘀和快的之