如何使用python收集一组连续的网页?

时间:2015-05-20 06:41:20

标签: python regex url beautifulsoup matching

https://example.net/users/x

这里,x是一个介于1到200000之间的数字。我想运行一个循环来获取所有URL并使用漂亮的汤从每个URL中提取内容。

from bs4 import BeautifulSoup
from urllib.request import urlopen
import re
content = urlopen(re.compile(r"https://example.net/users/[0-9]//"))
soup = BeautifulSoup(content)

这是正确的做法吗?我必须做两件事。

  1. 获取一组连续的网址
  2. 提取物&存储从每个页面/ URL检索的内容。
  3. 更新

    我只能从每个网页中获取一个特定值。

    soup = BeautifulSoup(content)
    divTag = soup.find_all("div", {"class":"classname"})
    for tag in divTag:
     ulTags = tag.find_all("ul", {"class":"classname"})
     for tag in ulTags:
      aTags = tag.find_all("a",{"class":"classname"})
      for tag in aTags:
       name = tag.find('img')['alt']
       print(name) 
    

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

import urllib2
import shutil

urls = []
for i in range(10):
    urls.append(str('https://www.example.org/users/' + i))


def getUrl(urls):
    for url in urls:
        # Only a file_name based on url string
        file_name = url.replace('https://', '').replace('.', '_').replace('/', '_')
        response = urllib2.urlopen(url)
        with open(file_name, 'wb') as out_file:
            shutil.copyfileobj(response, out_file)

getUrl(urls)

答案 1 :(得分:0)

如果您只需要网页的内容,则可以使用lxml,您可以从中解析内容。类似的东西:

from lxml import etree
r = requests.get('https://example.net/users/x')
dom = etree.fromstring(r.text)
# parse seomthing
title = dom.xpath('//h1[@class="title"]')[0].text

此外,如果您正在搜索数千页的10或100页,您可能希望查看类似grequests的内容,您可以在其中执行多个异步HTTP请求。