Как заставить мой код Python запрашивать URL-адрес и собирать информацию по мере необходимости с веб-страницы

Я использую простой код Python, чтобы попытаться получить URL-адрес и вычистить все другие URL-адреса, упомянутые на каждой веб-странице (все html-подстраницы, если таковые имеются под домашней / корневой страницей) этого URL-адреса. Вот мой код:

import urllib
import urllib2
import re
import socks
import socket

socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
socket.socket = socks.socksocket

req = urllib2.Request('http://www.python.org')

#connect to a URL
try: 
   website = urllib2.urlopen(req)

except urllib2.URLError as e:
   print "Error Reason:" ,e.reason   

else:
   #read html code
   html = website.read()
   #use re.findall to get all the links
   links = re.findall('"((http|ftp)s?://.*?)"', html)
   print links

Прямо сейчас я получаю простую ошибку, когда модуль socks не распознается. Я понял, что должен скопировать "socks.py" по правильному пути в директории Python lib / site-packages.

Я добавил модуль socks в свой код, так как мой скрипт на python не смог подключиться к URL http://www.python.org, Мой вопрос, использую ли я socks правильно?

Также мой сценарий позаботится обо всех веб-страницах под корневым URL? как я хочу все скрести urls из всех таких веб-страниц под корневым URL.

Также как я могу проверить, что будет port упомянуть в setdefaultproxy строка моего кода?

1 ответ

Решение

Я бы посоветовал вам использовать BeautifulSoup для целей Webscraping. Ниже приведен код для него с гораздо более простым методом.

import requests
from bs4 import BeautifulSoup

r=requests.get("http://www.python.org")
c=r.content

soup=BeautifulSoup(c,"html.parser")

anchor_list=[a['href'] for a in soup.find_all('a', href=True) if a.text.strip()]

print(anchor_list)

Надеюсь, поможет!

Другие вопросы по тегам