python循环访问网页(python爬虫翻页)

http://www.itjxue.com  2023-03-28 12:50  来源:未知  点击次数: 

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(),少什么,就比较容易发现。

(责任编辑:IT教学网)

更多