2017-10-12 77 views
1

我成功地刮掉了网站的第一页,但是当我试图刮掉多页面页面时,它工作正常,但结果完全错误。在Python中用循环刮掉多个页面

代码:

import requests 
from bs4 import BeautifulSoup 
from urllib.parse import urljoin 
for num in range(1,15): 
    res = requests.get('http://www.abcde.com/Part?Page={num}&s=9&type=%8172653').text 
    soup = BeautifulSoup(res,"lxml") 
    for item in soup.select(".article-title"): 
     print(urljoin('http://www.abcde.com',item['href'])) 

它仅在每个页面的URL改变一个数字,例如,

http://www.abcde.com/Part?Page=1&s=9&type=%8172653 
http://www.abcde.com/Part?Page=2&s=9&type=%8172653 

我总14页的这一点。

我的代码工作,但它只是反复打印出第一页的网址14次。我期望的结果是使用循环打印出来自不同页面的所有不同的URL。

+3

你实际上没有格式化字符串来替换它的数字......所以如果你使用3.6+或者其他方式''格式(num = num)''将页码放入的字符串... –

回答

2

正如乔恩克莱门茨指出,URL格式如下:

res = requests.get('http://www.abcde.com/Part?Page={}&s=9&type=%8172653'.format(num)).text 

您可以在pyformat.info找到更多关于Python格式字符串。

+0

嗨!谢谢(你的)信息。我尝试过,但它说属性错误:'响应'对象没有'格式'属性 – Makiyo

+0

对不起我的坏。最后错过了一个圆括号。更新了代码 –

+0

@Makiyo - 它适合你吗? –