python循环访问网页(python爬虫翻页)
python 多线程 访问网站
#python2
#coding=utf-8
import?os,re,requests,sys,time,threading
reload(sys)
sys.setdefaultencoding('utf-8')
class?Archives(object):
????def?__init__(self,?url):
????????self.url?=?url
????
????def?save_html(self,?text):
????????fn?=?'{}_{}'.format(int(time.time()),?self.url.split('/')[-1])
????????dirname?=?'htmls'
????????if?not?os.path.exists(dirname):
????????????os.mkdir(dirname)
????????with?open(os.path.join(dirname,?fn),?'w')?as?f:
????????????f.write(text)
????????????
????def?get_htmls(self):
????????try:??????????????
????????????r?=??requests.get(self.url)
????????????r.raise_for_status()
????????????r.encoding?=?r.apparent_encoding
????????????print?'get?html?from?',?url
????????????self.save_html(r.text)
????????except?Exception,e:
????????????print?'爬取失败',e????????????
????def?main(self):
????????thread?=?threading.Thread(target=self.get_htmls())
????????thread.start()
????????thread.join()
if?__name__=='__main__':
????start=time.time()
????fn?=?sys.argv[1]?if?len(sys.argv)1?else?'urls.txt'
????with?open(fn)?as?f:
????????s?=?f.readlines()
????for?url?in?set(s):
????????a=Archives(url.strip())
????????a.main()????
????end=time.time()
????print?end-start
python循环爬网页出现UnicodeEncodeError怎么可以跳过正在进行的一项继续下一步
实例代码如下:
for i in range(10): if i % 2: continue else: print i
python点击访问下一篇并爬取直到最后一页
对于只是读取某几个网站更新内容的爬虫完全没必要在python代码中实现增量的功能,直接在item中增加Url字段。
item['Url'] = response.url
然后在数据端把储存url的column设置成unique。
之后在python代码中捕获数据库commit时返回的异常,忽略掉或者转入log中都可以。
网上有说支持增量的,我看了代码+实际测试,还是觉得不是增量的...
我的做法是pipeline的open_spider时读取所有item里面的url,做成一个parsed_urls的list,在rule的process_link中过滤掉这些已经下载的url,如果需要的话可以再item里面加入last_notify属性进一步扩展...
python 循环爬取网页怎么忽略无效的路径
python下用if包含正确执行的语句,用else包含错误语句,执行pass。
比如以下代码:
if?rez:
????????for?a?in?range(0,?len(rez)):
????????????for?x?in?rez[a]['data']:
????????????????if?next_set==0:
????????????????????print?(x['title'],?x['url'],?'id='?+?x['lemmaId'])??#?解析打印json数据
????????????????????links.add(''?+?x['lemmaId'])
????????????????else:
????????????????????print?(x['title'],?x['url'],?'id='?+?x['lemmaId'])??#?解析打印json数据
????????????????????new_link.add(''?+?x['lemmaId'])
????????return?[links,new_link]
else:
????pass
python使用for循环,用不同参数访问一个网站,返回结果都是第一次访问时的结果?
不用session去试一下啊。比如我们对自己的代码做测试时,如果不是做压测,就不公用session。直接用requests的post/get搞,session是在同一个会话,有些东西会保持,而这些,可能刚好就是需要更改而你漏掉的,直接用requests.post(),少什么,就比较容易发现。