爬虫在web of science 中的应用(2.0版本)讲解)

接着上次的1.0接着说,1.0里只是爬取了第一页,如果我想爬取第二页,第三页呢?当然是用循环喽。
代码如下:

for i in range(1,10):
  url = "http://apps.webofknowledge.com/summary.do?product=UA&parentProduct=UA&search_mode=GeneralSearch&parentQid=&qid=34&SID=8EVHgmFwQyO7vUv8d9U&&update_back2search_link_param=yes&page=%d\"%i\n",
    "    
  html = etree.HTML(get_HTML(url))"
  names= html.xpath('//div/a[@class=\"smallV110 snowplow-full-record\"]/value[@lang_id="" or @lang_id="en"]')
  for name in names:
    with open("title.txt","a",encoding='utf-8') as f:
      f.write(name.xpath('string(.)').strip()+"\n")
      f.close

我在爬取第二页的时候,发现有的文献题目可能有两个,因为文章不是用全部英文写的所以题目就有一个原题目和英文题目。正常来说每页会有10篇文章的题目,但是现在加上别的语言写的题目,会匹配到超过10个题目。我现在只想要英文题目,怎么办?

这时候,再次按下F12,审查。发现,对于英文题目,lang_id这个属性有两个值,默认是英文的,就是“”,有多个题目的,就是"en",因此只要把属性值是这两个值的文本找出来就行了。

1.html.xpath('//div/a[@class="smallV110 snowplow-full-record"]/value[contains(@lang_id,"", "en")]')"
2.html.xpath('//div/a[@class="smallV110 snowplow-full-record"]/value[@lang_id="" or @lang_id="en"]')"

猜猜那种是对的?
答案是第二种。为什么第一种不对呢?因为contains的意思是包含,包含是有,但现在我要的是有且仅有。在contains里,"en"中就包含了"",这当然不是我要的结果了

好了,这样就实现了一次性读取多页题目的功能了,结果如下:


结果
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容