交作业啊,python爬取58的页面
第一次写博文,好紧张啊,写这么烂怎么给别人看啊
先做下总结:
刚开始学习python,自我感觉python写起来确实很方便,各种库,各种语法糖,不过刚接触,一下子记不下来这么多东西,总感觉乱乱的,用的多了熟悉之后应该就好了吧
这次作业基本完成了作业的要求,但是由于是在上班期间抽时间写的,可能有些乱。个人感觉这次作业的难度不大,唯一麻烦的地方就是找浏览量接口,
一开始我以为58会把浏览量的值直接发过来,通过选择器直接去修改页面的值,于是试了各种选择方式去js代码里搜,结果搜了半天也没找到,最后只好通过查看哪次网络请求之后浏览量就会出现的方式
来定位出获取浏览量的接口,总结完了。后面是全部代码
from collections import Iterator
from bs4 import BeautifulSoup
import requests
import re
import time header = {
'Host': 'jst1.58.com',
'User - Agent': 'Mozilla / 5.0 (Windows NT 6.1; WOW64;rv:46.0) Gecko / 20100101 Firefox / 46.0',
'Accept': '* / *',
'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'Accept-Encoding': 'gzip, deflate',
'Referer': 'http://bj.58.com/pingbandiannao/24063857671738x.shtml?adtype=1&entinfo=24063857671738_0&psid=157472432191615221843458468',
'Cookie': 'id58=vDg6HFci7MbdAHOifdgN2Q==; utm_source=market; spm=b-31580022738699-me-f-824.bdpz_biaoti; mcity=bj; city=bj; 58home=bj; 58tj_uuid=e0c574ac-c792-4b29-a6b6-0add83b27579; new_session=0; new_uv=1; init_refer=http%253A%252F%252Fbzclk.baidu.com%252Fadrc.php%253Ft%253D0fKL00c00f7ngK60jUPi0nW_R0jDeaFg00000r7J01300000XL2vy9.THYdr0K85yF9pywdpAqVuNqsusK15y7BujD1mycknj0snWmzuHf0IHYvPHDYfWf4nDD4nYDYwRf1fW7DfWFjwjb4nWu7wRmkf6K95gTqFhdWpyfqnWm4rHc1nHT3niusThqbpyfqnHmhULFG5HDhTLNBULFG5iusThbqn6K-5y9YIZ0lQzqJIydsQhkdUhD8PH68mvqVQLnOTLKV5ycVn1Ddrj0snWcLn16vrHbVUyRVuBY3nWfhmv6qmhwsX-qBpy7EIAb0mLFW5HRYn1bL%2526tpl%253Dtpl_10085_12986_1%2526l%253D1040411361%2526wd%253D58%2526issp%253D1%2526f%253D8%2526ie%253Dutf-8%2526tn%253Dbaiduhome_pg%2526inputT%253D850; als=0; ipcity=bj%7C%u5317%u4EAC%7C0; myfeet_tooltip=end; bj58_new_session=0; bj58_init_refer=""; bj58_new_uv=1; bj58_id58s="UC1sYXcxM1I3ajhtMTY5OQ=="; sessionid=d8c0d2b1-ea07-4ace-b038-1b367908784c; final_history=24063857671738%2C25843657514315',
'Connection': 'keep-alive',
'Cache-Control': 'max-age=0'
}
'''爬取详情页'''
def getDetail(url):
requests.adapters.DEFAULT_RETRIES = 5
infoid = re.sub('^.*/(.*)x\.shtml.*$', lambda m: '{}'.format(m.group(1)), url) '''网络不好时改用此方式,报错就两秒之后继续爬'''
# while True:
# try:
# time.sleep(2)
# response = requests.get(url)
# count = requests.get('http://jst1.58.com/counter?infoid={}'.format(infoid), headers=header)
# break
# except BaseException:
# print('错误')
# pass time.sleep(2)
response = requests.get(url)
count = requests.get('http://jst1.58.com/counter?infoid={}'.format(infoid), headers=header)
html = BeautifulSoup(response.text,'lxml')
count = re.sub('^.*Counter58.total=(.*)$',lambda m:'{}'.format(m.group(1)),count.text)
area = getFirst(html.select('#content div.col_sub.sumary ul li:nth-of-type(3) div.su_con span')) return {
'title' : getFirst(html.select('#content div.col_sub.mainTitle > h1')).get_text(),
'category' : getFirst(html.select('span.crb_i a:nth-of-type(1)')).get_text(),#span.crb_i:nth-child(3)
'time' : getFirst(html.select('#index_show li.time')).get_text(),
'price' : getFirst(html.select('#content div.col_sub.sumary li:nth-of-type(1) div.su_con span')).get_text(),
'chengse' : getFirst(getFirst(html.select('#content div.col_sub.sumary ul li:nth-of-type(2) div.su_con span')).stripped_strings),
'area' : ''.join('' if area == None else area.stripped_strings),
'count':count
} '''获取列表或生成器的第一个值'''
def getFirst(obj):
if isinstance(obj, list) and len(obj) != 0 :
return obj[0]
if isinstance(obj, Iterator):
return next(obj)
return None '''爬取列表页'''
def getListPage():
urls = ('http://bj.58.com/pbdn/0/pn{}/'.format(i) for i in range(1,200))
for url in urls:
response = requests.get(url)
html = BeautifulSoup(response.text, 'lxml')
detailUrls = html.select('#infolist > table.tbimg > tr') '''如果为空,则说明页数超出,停止继续爬取'''
if 0 == len(detailUrls):
break for dUrl in detailUrls:
if 'zzinfo' == getFirst(dUrl.get('class')):
continue
href = getFirst(dUrl.select('.img > a')).get('href')
# 打印出来结果
print(getDetail(href)) getListPage()
交作业啊,python爬取58的页面的更多相关文章
- 利用python爬取58同城简历数据
利用python爬取58同城简历数据 利用python爬取58同城简历数据 最近接到一个工作,需要获取58同城上面的简历信息(http://gz.58.com/qzyewu/).最开始想到是用pyth ...
- Python爬取网易云热歌榜所有音乐及其热评
获取特定歌曲热评: 首先,我们打开网易云网页版,击排行榜,然后点击左侧云音乐热歌榜,如图: 关于如何抓取指定的歌曲的热评,参考这篇文章,很详细,对小白很友好: 手把手教你用Python爬取网易云40万 ...
- python爬取北京政府信件信息01
python爬取,找到目标地址,开始研究网页代码格式,于是就开始根据之前学的知识进行爬取,出师不利啊,一开始爬取就出现了个问题,这是之前是没有遇到过的,明明地址没问题,就是显示网页不存在,于是就在百度 ...
- 毕设之Python爬取天气数据及可视化分析
写在前面的一些P话:(https://jq.qq.com/?_wv=1027&k=RFkfeU8j) 天气预报我们每天都会关注,我们可以根据未来的天气增减衣物.安排出行,每天的气温.风速风向. ...
- Python 爬取所有51VOA网站的Learn a words文本及mp3音频
Python 爬取所有51VOA网站的Learn a words文本及mp3音频 #!/usr/bin/env python # -*- coding: utf-8 -*- #Python 爬取所有5 ...
- 大神:python怎么爬取js的页面
大神:python怎么爬取js的页面 可以试试抓包看看它请求了哪些东西, 很多时候可以绕过网页直接请求后面的API 实在不行就上 selenium (selenium大法好) selenium和pha ...
- python爬取网站数据
开学前接了一个任务,内容是从网上爬取特定属性的数据.正好之前学了python,练练手. 编码问题 因为涉及到中文,所以必然地涉及到了编码的问题,这一次借这个机会算是彻底搞清楚了. 问题要从文字的编码讲 ...
- python爬取某个网页的图片-如百度贴吧
python爬取某个网页的图片-如百度贴吧 作者:vpoet mail:vpoet_sir@163.com 注:随意copy,不用告诉我 #coding:utf-8 import urllib imp ...
- Python:爬取乌云厂商列表,使用BeautifulSoup解析
在SSS论坛看到有人写的Python爬取乌云厂商,想练一下手,就照着重新写了一遍 原帖:http://bbs.sssie.com/thread-965-1-1.html #coding:utf- im ...
随机推荐
- 3016: [Usaco2012 Nov]Clumsy Cows
3016: [Usaco2012 Nov]Clumsy Cows Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 91 Solved: 69[Submi ...
- ansj 2.0.7 错误例子分析
我在做一个solr的项目,分词选定了ansj分词. 选择ansj的原因: 1)身边若干朋友的念叨,说是效果不错 2)网上看了若干评论,说是不错 3)自己尝试了一些case,觉得确实不错. 好了,项目中 ...
- Redis的发布订阅及.NET客户端实现
序言 发布订阅在设计模式中也可以说是观察者模式,针对这个模式是处理对象间一对多的依赖关系的,当一个对象发生变化,其它依赖他的对象都要得到通知并更新. 然而它也有自己的缺点,就是当主题发生一系列的变化时 ...
- http的几种请求的方式(Get、Post、Put、Head、Delete、Options、Trace和Connect)
http的这几种请求方式各有各的特点,适用于各自的环境.下面我就说说这些方式的各自特点: 1.Get:它的原理就是通过发送一个请求来取得服务器上的某一资源.获取到的资源是通过一组HTTP头和呈现数据来 ...
- 高并发解决方案之Actor——第一节
还在为状态的并发控制而痛苦吗? 还在因为数据库瓶颈而痛苦吗? 还在因为缓存的实时性控制而痛苦吗? 还在为了想分布式,但又不知道怎么下手而痛苦吗? Actor欢迎你!!! 一.什么是 ...
- python 机器学习 决策树
决策树(Decision Trees ,DTs)是一种无监督的学习方法,用于分类和回归. 优点:计算复杂度不高,输出结果易于理解,对中间值缺失不敏感,可以处理不相关的特征数据缺点:可能会产生过度匹配的 ...
- Maven项目搭建(一):Maven初体验
今天给大家介绍一个项目管理和综合工具:Maven. Maven: maven读作 ['meivin],本意是指可以被信任的领域专家,致力于传播知识(来自于http://en.wikipedia.org ...
- 开源免费的.NET图像即时处理的组件ImageProcessor
承接以前的组件系列,这个组件系列旨在介绍.NET相关的组件,让大家可以在项目中有一个更好的选择,社区对于第三方插件的介绍还是比较少的,很多博文的内容主要还是介绍一些简单的操作(很多人都说博客园现在是“ ...
- springmvc.xml或spring.xml 能运行配置文件总是出现错误
1:在java开发时总遇到配置文件配置正确,可以运行但有时显示错误.例如下图 上面配置文件正确但有时显错就不能运行.原因是配置文件的约束项错了. 原因是自己的jar包和配置文件版本不同.如果电脑联网它 ...
- Dubbo java.io.IOException: Can not lock the registry cache file
跑单测用例的时候,以前执行成功的用例,运行时控制台仍然会报 dubbo 相关的错误: Failed to save registry store file, cause: Can not lock t ...