Как заставить мой код 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)
Надеюсь, поможет!